私はAngularでの注入について完全に混乱しています。どこでそれを使用するのか、そしてその理由はわかりません。 ここで説明します のようにファクトリでのみ使用されますか?
myController.$inject = ['$scope','notify'];
ここで、notify
はファクトリーの名前です。
これは、コードを縮小した後の依存性注入をサポートする1つのアプローチです(縮小することを選択した場合)。
コントローラーを宣言すると、関数はパラメーターを受け取ります。
function ($scope, notify)
コードを縮小すると、関数は次のようになります。
function (a, b)
AngularJSは関数パラメーター名を使用してDIを推測するため、AngularJSはa
またはb
を認識しないため、コードが破損します。
この問題を解決するために、彼らはその問題についてコントローラー(または他のサービス/工場/など)を宣言する追加の方法を提供しました。
コントローラーの場合は、$inject
メソッド-ここで、コントローラー関数のパラメーターにマップするリテラルの配列を渡します。したがって、提供する場合
['$scope', 'notify']
関数への最初のパラメーターの値はこのコントローラーに関連付けられたスコープオブジェクトになり、2番目のパラメーターは通知サービスになります。
新しいコントローラー、サービスなどを宣言するときは、配列リテラル構文を使用できます。ここでは、次のようなことを行います。
angular.module('myModule').controller('MyController', ['$scope', 'notify', function ($scope, notify) {
...
}]);
コントローラー関数へのパラメーターとしての配列は、DIオブジェクトを関数パラメーターにマップします。
コントローラーなどを宣言するときは、すべて同じ場所にあるので読みやすく、理解しやすく、クロスチェックしやすいため、オプション#2を好みます。
@ マーク 回答を補完するには、次のスタイルで$ injectメソッドを使用することに注意することが重要です。
MyController.$inject = ['$scope', 'notify'];
ビルド時にインジェクションの依存関係を追加できますproviders唯一のangularレシピdo n'tは「フレンドリーな」注釈スタイルを許可します。つまり:
.controller('MyController', ['$scope', 'notify',...
宣言される依存関係。
_$inject
_の使用方法は次のとおりです。
_function ApplicationController($scope){
$scope.greet = "Foo is Not Great!5";
}
ApplicationController.$inject = ['$scope','$ionic'];
app.controller('ApplicationController', ApplicationController);
_
glify ingまたは最小化からコードを保護するためにこれを行う必要があります。
function(firstName,lastName)
はfunction(n,m)
に変換される場合があります。
したがって、AngularJSの場合、_$scope
_を「s」に置き換えることができるため、コードが破損します。これは、_$
_記号がないと、angularJSがコードを認識できないためです。
ng-strict-di
属性