it-swarm.com.de

Ich verstehe die Verwendung von $ inject in Controllern nicht

Ich bin total verwirrt über Injizieren in Angular. Ich weiß nicht, wo ich es verwenden soll und warum. Wird es nur mit factory als hier beschrieben? verwendet

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

Hier ist notify der Name der Fabrik.

63
unknownbits

Dies ist ein Ansatz zur Unterstützung der Abhängigkeitsinjektion nach der Minimierung Ihres Codes (falls Sie sich für eine Minimierung entscheiden).

Wenn Sie einen Controller deklarieren, übernimmt die Funktion folgende Parameter:

function ($scope, notify)

Wenn Sie den Code verkleinern, sieht Ihre Funktion folgendermaßen aus:

function (a, b)

Da AngularJS die Funktionsparameternamen verwendet, um DI abzuleiten, wird Ihr Code beschädigt, da AngularJS nichts über a oder b weiß.

Um dieses Problem zu lösen, stellten sie zusätzliche Möglichkeiten zur Verfügung, Controller (oder andere Dienste/Fabriken/usw.) für diese Angelegenheit zu deklarieren:

  1. Verwenden Sie für Controller den Befehl $inject method - hier übergeben Sie ein Array von Literalen, die den Parametern Ihrer Controller-Funktion zugeordnet sind. Also, wenn Sie zur Verfügung stellen

    ['$scope', 'notify']
    

    dann ist der Wert des ersten Parameters für Ihre Funktion das mit diesem Controller verknüpfte Bereichsobjekt, und der zweite Parameter ist der Benachrichtigungsdienst.

  2. Wenn Sie neue Controller, Dienste usw. deklarieren, können Sie die Array-Literal-Syntax verwenden. Hier machst du so etwas:

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

    Das Array als Parameter für die Reglerfunktion ordnet die DI-Objekte Ihren Funktionsparametern zu.

Ich bevorzuge Option 2, wenn Steuerungen usw. deklariert werden, da sie leichter zu lesen/zu verstehen/zu überprüfen sind, da sie sich alle an derselben Stelle befinden.

101
Mark Sherretta

Um @ mark zu ergänzen, ist es wichtig zu beachten, dass mit der $ inject-Methode im Stil von:

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

ermöglicht das Hinzufügen von Injection-Abhängigkeiten beim Erstellen von Providern, die die einzigen angular Rezepte sind, die nicht 'freundlich' zulassen Anmerkungsstil, dh:

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

zu deklarierende Abhängigkeiten.

21
nikk wong

Die Art und Weise, wie Sie $inject Verwenden sollten, ist:

function ApplicationController($scope){
    $scope.greet = "Foo is Not Great!5";
}

ApplicationController.$inject = ['$scope','$ionic'];

app.controller('ApplicationController', ApplicationController);

Wir müssen dies tun, um den Code vor glify oder Minimierung zu schützen.

function(firstName,lastName) wird möglicherweise zu function(n,m).

Für AngularJS wird der Code beschädigt, da $scope Durch 's' ersetzt werden kann. Dies liegt daran, dass der AngularJS ohne das Zeichen $ Den Code nicht erkennen kann.

5
Pritam Banerjee

Es ist obligatorisch, dieses Format zu verwenden, wenn wir ng-strict-di Attribut

2
user1452840