10

Ecco una funzione normale ES5 nel mio codice angolare che funziona:Le funzioni freccia ES6 sono incompatibili con Angolare?

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

ho voluto convertirlo in ES6 funzione freccia

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

ma dà l'errore

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 Le funzioni freccia ES6 non sono compatibili con Angular?


EDIT: Ho pensato che forse angolare non è in grado di dedurre il nome $templateCache e così in grado di iniettare, ma poi mi sono collegato a consolare e tuttavia esse indicano correttamente:

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

Si consiglia di non fare affidamento sui nomi dei parametri della funzione, dal momento che smetti di funzionare nel momento in cui riduci il codice. Usa qualcosa come [ng-annotate] (https://github.com/olov/ng-annotate). –

+0

L'unica differenza sembra essere che la tua funzione restituisce qualcosa. E la sintassi, naturalmente. – Bergi

risposta

8

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

Questo è principalmente perché AngularJS 1.4.6 fa uso di (Function).toString, che non iniziano con function( per le funzioni di direzione, almeno in Firefox:

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

AngularJS supporta la notazione freccia da 1.5.0 onwards.

+0

YMMV, ovviamente, se usi Babel o Traceur! – Brian

+0

I collegamenti mostrano che il supporto di base per le funzioni freccia esiste sin dall'angolare 1.4.4. (Nota il tag v1.4.4 sul commit nel tuo secondo link). Penso che il commit effettivo che si verifica sul codice dell'OP sia [commit 03726f7f] (https://github.com/angular/angular.js/commit/03726f7fbd5d71c0604b8dd40e97cb2fb0fb777f), che ha aggiunto il supporto per le funzioni di freccia con un parametro non definito per Angular 1.5. –

2

ho cercato un'altra variante che ha lavorato: (x)=>… (invece di x=>…)

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

Credo che necessita di parentesi per qualche motivo

Problemi correlati