10

यहाँ मेरी कोणीय कोड में एक सामान्य ES5 समारोह जो काम करता है:ES6 तीर कार्य कोणीय के साथ असंगत हैं?

app.run(function($templateCache){ $templateCache.put('/some','thing') }); 

मैं इसे ES6 तीर समारोह

app.run($templateCache => $templateCache.put('/some','thing')); 

कन्वर्ट करने के लिए चाहता था, लेकिन यह त्रुटि

Uncaught Error: [$injector:unpr] Unknown provider: '/some'Provider <- '/some' 
http://errors.angularjs.org/1.4.6/$injector/unpr?p0='%2Fsome'Provider%20%3C-%20'%2Fsome' 
REGEX_STRING_REGEXP @ angular.js:68 
(anonymous function) @ angular.js:4287 
getService   @ angular.js:4435 
(anonymous function) @ angular.js:4292 
getService   @ angular.js:4435 
invoke    @ angular.js:4467 
(anonymous function) @ angular.js:4297 
forEach    @ angular.js:336 
createInjector  @ angular.js:4297 
doBootstrap   @ angular.js:1657 
bootstrap   @ angular.js:1678 
angularInit   @ angular.js:1572 
(anonymous function) @ angular.js:28821 
trigger    @ angular.js:3022 
eventHandler   @ angular.js:3296 

हैं देता है ES6 तीर कार्य कोणीय के साथ असंगत है?


संपादित करें: मैंने सोचा था कि शायद कोणीय नाम $templateCache लगा सकते और इसलिए यह इंजेक्षन करने में असमर्थ नहीं है लेकिन फिर मैं यह लॉग इन सांत्वना देने और यह इसे सही ढंग से प्रदर्शित करता है:

app.run($templateCache=>console.log($templateCache)); 
// => 
// Object {} 
//  destroy: function() 
//  get: function(key) 
//  info: function() 
//  put: function(key, value) 
//  remove: function(key) 
//  removeAll: function() 
//  __proto__: Object 
+0

आप समारोह के मापदंडों के नाम पर भरोसा नहीं करना चाहिए के लिए कोष्ठक की जरूरत है लगता है, क्योंकि यह होगा उस पल को काम करना बंद करें जब आप अपना कोड कम करते हैं। कुछ [एनजी-एनोटेट] (https://github.com/olov/ng-annotate) का उपयोग करें। –

+0

एकमात्र अंतर यह प्रतीत होता है कि आपका फ़ंक्शन कुछ वापस कर देता है। और पाठ्यक्रम का वाक्यविन्यास। – Bergi

उत्तर

8

सही । Your version of AngularJS is not compatible with arrow functions that make use of $injector.

यह मुख्य रूप से है, क्योंकि AngularJS 1.4.6 जो तीर कार्यों के लिए function( साथ शुरू नहीं करता है, कम से कम फ़ायरफ़ॉक्स में (Function).toString के उपयोग, बनाता है:

>var a =() => 5 
function a() 
>a.toString() 
"() => 5" // not "function a() {return 5;}" 

AngularJS 1.5.0 onwards से तीर अंकन समर्थन करता है।

+0

वाईएमएमवी, ज़ाहिर है, यदि आप बेबेल या ट्रेसेर का उपयोग करते हैं! – Brian

+0

आपके लिंक दिखाते हैं कि एंगुलर 1.4.4 के बाद तीर कार्यों के लिए मूलभूत समर्थन मौजूद है। (अपने दूसरे लिंक में प्रतिबद्धता पर v1.4.4 टैग पर ध्यान दें।) मुझे लगता है कि ओपी के कोड पर भालू वास्तविक प्रतिबद्धता है [प्रतिबद्ध 03726f7f] (https://github.com/angular/angular.js/commit/03726f7fbd5d71c0604b8dd40e97cb2fb0fb777f), जो कोणीय 1.5 के लिए एक अनपेक्षित पैरामीटर के साथ तीर कार्यों के लिए समर्थन जोड़ा गया। –

2

मैं एक और भिन्नता जो काम करने की कोशिश की: (x)=>… (x=>… के बजाय)

app.run(($templateCache) => $templateCache.put('/some','thing')); 

मैं इसे किसी कारण

संबंधित मुद्दे