10

Hier ist eine normale ES5-Funktion in meinem Angular-Code, der funktioniert:Sind ES6-Pfeilfunktionen mit Angular nicht kompatibel?

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

ich es ES6 Pfeil Funktion

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

aber es gibt den Fehler

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 

Sind umwandeln wollte ES6 Pfeilfunktionen inkompatibel mit Angular?


EDIT: Ich dachte, vielleicht Angular nicht in der Lage ist, den Namen $templateCache und so nicht in der Lage zu schließen, um es zu injizieren, aber es dann richtig Ich loggte sie zu trösten und es zeigt:

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

Sie sollten nicht auf den Namen der Funktion der Parameter verlassen, da braucht, wird es Hör auf zu arbeiten, sobald du deinen Code verkleinert hast. Verwenden Sie etwas wie [ng-annotieren] (https://github.com/olov/ng-annotate). –

+0

Der einzige Unterschied scheint zu sein, dass Ihre Funktion etwas zurückgibt. Und natürlich die Syntax. – Bergi

Antwort

8

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

Dies ist vor allem, weil AngularJS 1.4.6 nutzt (Function).toString, die nicht mit function( für Pfeil Funktionen beginnt, zumindest in Firefox:

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

AngularJS unterstützt die Pfeil-Notation von 1.5.0 onwards.

+0

YMMV natürlich, wenn Sie Babel oder Traceur verwenden! – Brian

+0

Ihre Links zeigen, dass die grundlegende Unterstützung für Pfeilfunktionen seit Angular 1.4.4 existiert. (Beachten Sie das v1.4.4-Tag auf dem Commit in Ihrem zweiten Link.) Ich denke, das eigentliche Commit, das auf dem OP-Code beruht, ist [commit 03726f7f] (https://github.com/angular/angular.js/commit/03726f7fbd5d71c0604b8dd40e97cb2fb0fb777f), die Unterstützung für Pfeilfunktionen mit einem nicht parenthesized Parameter für Angular 1.5 hinzugefügt. –

2

habe ich versucht, eine andere Variante, die gearbeitet: (x)=>… (statt x=>…)

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

Ich denke, es Klammern aus irgendeinem Grund

Verwandte Themen