javascript - sintaxis - ¿Son incompatibles las funciones de flecha ES6 con Angular?
map javascript (2)
Aquí hay una función normal de ES5 en mi código angular que funciona:
app.run(function($templateCache){ $templateCache.put(''/some'',''thing'') });
Quería convertirlo a la función de flecha ES6
app.run($templateCache => $templateCache.put(''/some'',''thing''));
pero da el error
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
¿Son incompatibles las funciones de flecha ES6 con Angular?
EDITAR: Pensé que quizás Angular no puede inferir el nombre $templateCache
y por lo tanto no puede inyectarlo, pero luego lo registré en la consola y lo muestra correctamente:
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
Correcto. Su versión de AngularJS no es compatible con las funciones de flecha que hacen uso de $ injector.
Esto se debe principalmente a que AngularJS 1.4.6 hace uso de (Function).toString
, que no comienza con la function(
para las funciones de flecha, al menos en Firefox:
>var a = () => 5
function a()
>a.toString()
"() => 5" // not "function a() {return 5;}"
AngularJS admite la notación de flecha desde 1.5.0 en adelante .
Probé otra variación que funcionó: (x)=>…
(en lugar de x=>…
)
app.run(($templateCache) => $templateCache.put(''/some'',''thing''));
Supongo que necesita paréntesis por alguna razón