最初に少し説明します。
依存性注入の場合、コントローラーをグローバル関数を使用して宣言するか、メソッドの引数として宣言するかは問題ではありませんmodule.controller(...)
。依存関係インジェクターは、関数自体にのみ関心があります。したがって、あなたが実際に求めているのは、これら2つの同等性です。
// First
function MyController($scope) {}
MyController.$inject = [ '$scope '];
// Second
function($scope) {}
また、コントローラー関数が匿名かどうかはインジェクターには関係ないため、上記の 2 つは次のようになります。
// First
function MyController($scope) {}
MyController.$inject = [ '$scope '];
// Second
function MyController($scope) {}
これで、2 つのコントローラーの唯一の違いは、$inject
一方のコントローラーにプロパティが存在することだけであることが明らかになりました。
そして、これがあなたの質問に対する実際の答えです:
これら 2 つのコントローラーはほとんど同じです。どちらも引数として を受け取り、$scope
同じように機能します。ただし、後でコードを縮小することにした場合は、$inject
配列が設定されたバージョンのみが正しく機能します。これは、$inject
配列を指定せず、インライン アノテーション アプローチ ( http://docs.angularjs.org/guide/di#inlineannotation ) を使用しない場合、関心のある依存関係をインジェクターが見つける唯一の方法だからです。関数の引数の名前をチェックすることです (それらをサービス ID として扱います)。ただし、縮小すると、これらの引数にランダムに名前が付けられるため、このように依存関係を認識する機会がなくなります。
したがって、コードを縮小する場合は、配列またはインライン アノテーションを使用して依存関係を明示的に指定する必要があります$inject
。そうしないと、どのバージョンでも問題なく動作します。