Normalerweise gibt es drei Möglichkeiten für ein Objekt, die Kontrolle über seine Abhängigkeiten zu erlangen:
Abhängigkeitsinjektion wird über den dritten Weg implementiert. Zum Beispiel:
function SomeClass(greeter) { this.greeter = greeter; } SomeClass.prototype.greetName = function(name) { this.greeter.greet(name); };
SomeClass kann zur Laufzeit auf den internen Begrüßer zugreifen, es ist ihr jedoch egal, wie sie einen Verweis auf den Begrüßer erhält.
Um einen Verweis auf die Greeter-Instanz zu erhalten, ist der Ersteller von SomeClass dafür verantwortlich, seine Abhängigkeiten zu erstellen und sie zu übergeben.
Aus den oben genannten Gründen verwendet AngularJS $injetor (Injektordienst), um Abhängigkeitsabfragen und Instanziierung zu verwalten.
Tatsächlich ist $injetor für die Instanziierung aller Komponenten in AngularJS verantwortlich, einschließlich Anwendungsmodulen, Direktiven und Controllern.
Zum Beispiel der folgende Code. Dies ist eine einfache Anwendung, die ein Modul und einen Controller deklariert:
angular.module('myApp', []) .factory('greeter', function() { return { greet: function(msg) {alert(msg);} } }) .controller('MyController', function($scope, greeter) { $scope.sayHello = function() { greeter.greet("Hello!"); }; });
Wenn AngularJS dieses Modul instanziiert, sucht es nach einem Begrüßer und übergibt natürlich einen Verweis darauf:
<div ng-app="myApp"> <div ng-controller="MyController"> <button ng-click="sayHello()">Hello</button> </div> </div>
Intern ist der Verarbeitungsprozess von AngularJS wie folgt:
// 使用注入器加载应用 var injector = angular.injector(['ng', 'myApp']); // 通过注入器加载$controller服务:var $controller = injector.get('$controller'); var scope = injector.get('$rootScope').$new(); // 加载控制器并传入一个作用域,同AngularJS在运行时做的一样 var MyController = $controller('MyController', {$scope: scope})
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass dieser Artikel für alle hilfreich ist, die AngularJS-Abhängigkeitsinjektion lernen.