ES6 箭头函数是否与 Angular 不兼容?
Are ES6 arrow functions incompatible with Angular?
这是我的 Angular 代码中正常运行的 ES5 函数:
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 箭头函数是否与 Angular 不兼容?
编辑:我想也许 Angular 无法推断名称 $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
正确。 Your version of AngularJS is not compatible with arrow functions that make use of $injector.
这主要是因为AngularJS 1.4.6使用了(Function).toString
,箭头函数不以function(
开头,至少在Firefox中是这样:
>var a = () => 5
function a()
>a.toString()
"() => 5" // not "function a() {return 5;}"
AngularJS 支持来自 1.5.0 onwards 的箭头符号。
我尝试了另一种有效的变体:(x)=>…
(而不是 x=>…
)
app.run(($templateCache) => $templateCache.put('/some','thing'));
我猜它出于某种原因需要括号
这是我的 Angular 代码中正常运行的 ES5 函数:
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 箭头函数是否与 Angular 不兼容?
编辑:我想也许 Angular 无法推断名称 $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
正确。 Your version of AngularJS is not compatible with arrow functions that make use of $injector.
这主要是因为AngularJS 1.4.6使用了(Function).toString
,箭头函数不以function(
开头,至少在Firefox中是这样:
>var a = () => 5
function a()
>a.toString()
"() => 5" // not "function a() {return 5;}"
AngularJS 支持来自 1.5.0 onwards 的箭头符号。
我尝试了另一种有效的变体:(x)=>…
(而不是 x=>…
)
app.run(($templateCache) => $templateCache.put('/some','thing'));
我猜它出于某种原因需要括号