少し明確化:依存性の注入のために
、あなたがグローバル関数やmodule.controller(...)
メソッドの引数としてを使用してコントローラを宣言するかどうかは関係ありません。依存性インジェクタは機能自体についてのみ心配しています。それでは、あなたが実際にについて尋ねているのは、これら二つの等価性は次のとおりです。
// First
function MyController($scope) {}
MyController.$inject = [ '$scope '];
// Second
function($scope) {}
とコントローラ機能は、インジェクタのために重要ではありません。また、匿名であるかどうかにかかわらず、上記の二つは全く同じようにできるため。
// First
function MyController($scope) {}
MyController.$inject = [ '$scope '];
// Second
function MyController($scope) {}
は、今ではあなたの二つのコントローラ間の唯一の違いは、そのうちの一つで$inject
財産の存在であることは明らかです。
そしてここでは、あなたの質問に、実際の答えだ:
これら二つのコントローラは、ほぼ同じです。どちらも引数として$scope
を受け取り、同じように機能します。ただし、コードを後で縮小することにした場合は、$inject
配列が設定されたバージョンのみが正しく動作します。これは、$inject
配列を指定していない場合、またはインラインアノテーションアプローチ(http://docs.angularjs.org/guide/di#inlineannotation)を使用している場合、インジェクタが興味のある依存関係を見つける唯一の方法は、関数引数の名前をチェックすることですサービスID)。しかし、人口の減少はそれらの議論をランダムに命名し、このように依存関係を認識する機会を取り除く。
コードを小さくする場合は、$inject
配列またはインライン注釈を使用して依存関係を明示的に指定する必要があります。そうしないと、すべてのバージョンがまったく同じように動作します。
ありがとうございますが、それは '$ http'でうまくいかないようです...ここでそれについて尋ねられます:http://stackoverflow.com/q/16664325 – user2283066