10

İşte çalışır benim Açısal kodunda normal ES5 fonksiyonu var:ES6 ok işlevleri Angular ile uyumlu değil mi?

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

Ben ES6 ok fonksiyonu

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

dönüştürmek istedim ama

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 

Are hata veriyor ES6 ok fonksiyonları Angular ile uyumlu değil mi?


DÜZENLEME: Belki Açısal adını $templateCache çıkarımda ve bunu enjekte yani yapamaz olmadığını sanan ama sonra teselli etmek onu açmış ve onu doğru bir şekilde gösterir:

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

Sen işlevin parametre isimlerinin güvenmemelisiniz nedense parantez ihtiyacı tahmin: –

+0

Tek fark, işlevinizin bir şey döndürmesidir. Ve tabii ki sözdizimi. – Bergi

cevap

8

Doğru . Your version of AngularJS is not compatible with arrow functions that make use of $injector.

Bu esas angularjs çünkü 1.4.6 en azından Firefox'ta, ok fonksiyonları için function( ile başlamıyor (Function).toString kullanımını yapar:

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

angularjs 1.5.0 onwards dan ok gösterimi destekler. o olacak çünkü (x)=>…

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

(yerine x=>… ait) Ben

+0

YMMV, elbette, Babel veya Traceur'u kullanırsanız! – Brian

+0

Bağlantılarınız, Açısal 1.4.4'ten beri ok işlevlerine yönelik temel desteğin olduğunu göstermektedir. (İkinci bağlantınızdaki v1.4.4 etiketini not edin.) OP'nin kodunda bulunan asıl işlemin [taahhüt 03726f7f] olduğunu unutmayın (https://github.com/angular/angular.js/commit/03726f7fbd5d71c0604b8dd40e97cb2fb0fb777f), Açısal 1.5 için saydam olmayan bir parametre ile ok fonksiyonları için destek ekledi. –

2

çalıştığım başka varyasyonu denedik Kodunuzu küçülttüğünüz anda çalışmayı bırakın. [Ng-annotate] gibi bir şey kullanın (https://github.com/olov/ng-annotate).