/ / AngularJS: dyrektywa / wstrzykiwanie zależności - javascript, angularjs

AngularJS: dyrektywa / iniekcja zależności - javascript, angularjs

Aby dodać zależność od Angulara, tak mówią doktorzy:

Źródło

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

Ale czy możemy wprowadzić dyrektywę bezpośrednio do kontrolera w ten sposób:

var app = angular.module("fileUpload", []);
app.controller("MyCtrl", ["ngFileUpload","$scope", "Upload", function (ngFileUpload,$scope, Upload) {...
  1. Jeśli nie, to z jakiego powodu nie zapewnia się tej możliwości kontrolerowi?
  2. Czy istnieje sposób na wstrzyknięcie zależności, gdy konkretny kontroler się ładuje?

Odpowiedzi:

1 dla odpowiedzi № 1

Żadne moduły nie są w zasadzie bazą lub„Przybornik”, jeśli chcesz. Musisz wstrzyknąć jeden moduł do drugiego, aby mógł mieć dostęp do swoich „narzędzi” (filtrów / dyrektyw / usług itp.). Powodem jest to, że moduł jest odpowiedzialny za ładowanie zależności i kolejność operacji. Dzieje się tak dlatego, że kiedy poprosisz o „narzędzie” z modułu do kontrolera, możesz być pewien, że ono tam jest (w przeciwnym razie zostanie zgłoszony błąd).

Moduły mogą wyświetlać inne moduły jako ichzależności. W zależności od modułu oznacza to, że wymagany moduł musi zostać załadowany przed załadowaniem wymaganego modułu. Innymi słowy, bloki konfiguracyjne wymaganych modułów są wykonywane przed blokami konfiguracyjnymi wymaganego modułu. To samo dotyczy bloków uruchamiania. Każdy moduł można załadować tylko raz, nawet jeśli wymaga tego wiele innych modułów.

Kiedy wstrzykujesz jeden moduł do drugiego, jesteśpowiedzenie „Moduł A wymaga rzeczy z modułu B”. Teraz, gdy potrzebujesz konkretnego narzędzia, czyli kiedy wstrzykujesz je do kontrolera, aby mieć dostęp do tego konkretnego narzędzia.

Zastanów się:

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
});
.....

}]);

Więc ponieważ wstrzykujesz ngFileUpload twój kontroler w myApp moduł może teraz wstrzykiwać Upload serwis od ngFileUpload moduł i sterownik nie muszą się martwić, jeśli usługa jest obecna (jeśli nie jest, otrzymasz błąd wtrysku z kątownika).