web-dev-qa-db-ja.com

コントローラーでの$ injectの使用がわかりません

私はAngularでの注入について完全に混乱しています。どこでそれを使用するのか、そしてその理由はわかりません。 ここで説明します のようにファクトリでのみ使用されますか?

myController.$inject = ['$scope','notify'];

ここで、notifyはファクトリーの名前です。

63
unknownbits

これは、コードを縮小した後の依存性注入をサポートする1​​つのアプローチです(縮小することを選択した場合)。

コントローラーを宣言すると、関数はパラメーターを受け取ります。

function ($scope, notify)

コードを縮小すると、関数は次のようになります。

function (a, b)

AngularJSは関数パラメーター名を使用してDIを推測するため、AngularJSはaまたはbを認識しないため、コードが破損します。

この問題を解決するために、彼らはその問題についてコントローラー(または他のサービス/工場/など)を宣言する追加の方法を提供しました。

  1. コントローラーの場合は、$injectメソッド-ここで、コントローラー関数のパラメーターにマップするリテラルの配列を渡します。したがって、提供する場合

    ['$scope', 'notify']
    

    関数への最初のパラメーターの値はこのコントローラーに関連付けられたスコープオブジェクトになり、2番目のパラメーターは通知サービスになります。

  2. 新しいコントローラー、サービスなどを宣言するときは、配列リテラル構文を使用できます。ここでは、次のようなことを行います。

    angular.module('myModule').controller('MyController', ['$scope', 'notify', function ($scope, notify) {
        ...
    }]);
    

    コントローラー関数へのパラメーターとしての配列は、DIオブジェクトを関数パラメーターにマップします。

コントローラーなどを宣言するときは、すべて同じ場所にあるので読みやすく、理解しやすく、クロスチェックしやすいため、オプション#2を好みます。

101
Mark Sherretta

@ マーク 回答を補完するには、次のスタイルで$ injectメソッドを使用することに注意することが重要です。

MyController.$inject = ['$scope', 'notify'];

ビルド時にインジェクションの依存関係を追加できますproviders唯一のangularレシピdo n'tは「フレンドリーな」注釈スタイルを許可します。つまり:

.controller('MyController', ['$scope', 'notify',... 

宣言される依存関係。

21
nikk wong

_$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がコードを認識できないためです。

5
Pritam Banerjee

ng-strict-di属性

2
user1452840