10

はここで働く私の角度のコードでは、通常のES5機能です:ES6の矢印機能はAngularと互換性がありませんか?

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と互換性がありませんか?


編集:私は、おそらく角度が名前$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 
+0

ために括弧を必要と推測(x)=>…(代わりにx=>…の)

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

をコードを小さくした瞬間の作業をやめてください。 [ng-annotate](https://github.com/olov/ng-annotate)のようなものを使用してください。 –

+0

唯一の違いは、あなたの関数が何かを返すということです。もちろん構文です。 – Bergi

答えて

8

正しいです。 Your version of AngularJS is not compatible with arrow functions that make use of $injector.

AngularJSは1.4.6は、少なくともFirefoxで、矢印の機能にfunction(で始まらない(Function).toString、を使用するので、これは主に次のとおりです。

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

AngularJSは1.5.0 onwardsから矢印記法をサポートしています。

+0

YMMV、もちろん、あなたがBabelまたはTraceurを使用している場合! – Brian

+0

あなたのリンクは、矢印関数の基本的なサポートがAngular 1.4.4以来存在していたことを示しています。 (あなたの2番目のリンクでコミットのv1.4.4タグに注意してください)私は、OPのコードを担う実際のコミットは[commit 03726f7f](https://github.com/angular/angular.js/commit/03726f7fbd5d71c0604b8dd40e97cb2fb0fb777f)だと思います)、Angular 1.5の括弧で囲まれていないパラメータを持つ矢印関数のサポートが追加されました。 –

2

私が働いていた別のバリエーションを試みた:私はそれをするので、それは、あなたが関数のパラメータの名前に頼るべきではありません何らかの理由

関連する問題