/ / AngularJS: Direktive / Dependency Injection - Javascript, AngularJS

AngularJS: Direktive / Abhängigkeitsinjektion - javascript, angularjs

So fügen Sie Angular Abhängigkeit hinzu:

Quelle

//inject directives and services.
var app = angular.module("fileUpload", ["ngFileUpload"]);
app.controller("MyCtrl", ["$scope", "Upload", function ($scope, Upload) {...

Aber können wir die Direktive wie folgt direkt in den Controller einspeisen:

var app = angular.module("fileUpload", []);
app.controller("MyCtrl", ["ngFileUpload","$scope", "Upload", function (ngFileUpload,$scope, Upload) {...
  1. Wenn nicht, aus welchem ​​Grund wird diese Funktion dem Controller nicht zur Verfügung gestellt?
  2. Gibt es eine Möglichkeit, die Abhängigkeit beim Laden eines bestimmten Controllers zu injizieren?

Antworten:

1 für die Antwort № 1

Keine Module sind im Wesentlichen die Basis oder ein"Toolbox", wenn Sie so wollen. Sie müssen ein Modul in ein anderes einfügen, damit es Zugriff auf seine "Werkzeuge" (Filter / Direktiven / Dienste usw.) hat. Der Grund ist, dass das Modul für das Laden von Abhängigkeiten und die Reihenfolge der Operationen verantwortlich ist. Auf diese Weise können Sie sicher sein, dass ein "Werkzeug", das von einem Modul an eine Steuerung gesendet wird, vorhanden ist (oder es wird ein Fehler ausgegeben).

Module können andere Module als ihre auflistenAbhängigkeiten. Abhängig von einem Modul bedeutet dies, dass das erforderliche Modul geladen werden muss, bevor das erforderliche Modul geladen wird. Mit anderen Worten, die Konfigurationsblöcke der erforderlichen Module werden vor den Konfigurationsblöcken des erforderlichen Moduls ausgeführt. Gleiches gilt für die Laufblöcke. Jedes Modul kann nur einmal geladen werden, auch wenn mehrere andere Module dies erfordern.

Wenn Sie ein Modul in ein anderes injizieren, sind Sie"Modul A erfordert Dinge von Modul B". Jetzt, wenn Sie ein bestimmtes Werkzeug benötigen, dh wenn Sie es in die Steuerung einspritzen, damit Sie Zugriff auf dieses bestimmte Werkzeug haben.

Also überlegen Sie:

var app = angular.module("myApp", ["ngFileUpload"]);

app.controller("MyCtrl", ["$scope", "Upload", function ($scope, Upload) {

.....

Upload.upload(uploadData).then(function (resp) {
//success
}, null, function (evt) {
//upload progress
});
.....

}]);

Also weil du spritzt ngFileUpload Ihr Controller in der myApp Modul kann jetzt das einspritzen Upload Service von der ngFileUpload Modul und die Steuerung müssen sich keine Sorgen machen, wenn der Dienst vorhanden ist (wenn dies nicht der Fall ist, erhalten Sie einen Injektionsfehler von Angular).