这是在我的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,因此无法注入它,但随后我将其记录到控制台,并确实显示了它:
$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
正确。您的AngularJS版本与使用$ injector的箭头功能不兼容。
这主要是因为AngularJS 1.4.6使用了(Function).toString,function(至少在Firefox 中,它不是以箭头功能开头的:
(Function).toString
function(
>var a = () => 5 function a() >a.toString() "() => 5" // not "function a() {return 5;}"
AngularJS从1.5.0开始支持箭头符号。