/ / AngularJS: директива / введення залежності - javascript, angularjs

AngularJS: директива / ін'єкції залежності - javascript, angularjs

Щоб додати залежність до кутової, це те, що документи говорять:

Джерело

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

Але чи можемо ми ввести директиву безпосередньо в контролер так:

var app = angular.module("fileUpload", []);
app.controller("MyCtrl", ["ngFileUpload","$scope", "Upload", function (ngFileUpload,$scope, Upload) {...
  1. Якщо ні, то яка причина не надавати цю можливість контролеру?
  2. Чи існує спосіб введення залежності, коли певний контролер завантажується?

Відповіді:

1 для відповіді № 1

Жоден модуль по суті не є базовим або а"панель інструментів", якщо ви хочете. Вам потрібно ввести один модуль в інший, щоб він мав доступ до своїх "інструментів" (фільтрів / директив / служб тощо). Причина полягає в тому, що модуль відповідає за завантаження залежності та порядок операцій. Це так, що коли ви запитуєте "інструмент" з модуля в контролер, ви можете бути впевнені, що він є (або буде видана помилка).

Модулі можуть перелічити інші модулі як своїзалежності. Залежно від модуля означає, що необхідний модуль потрібно завантажити перед завантаженням необхідного модуля. Іншими словами, блоки конфігурації необхідних модулів виконуються перед блоками конфігурації модуля, що вимагає. Те саме стосується запущених блоків. Кожен модуль може бути завантажений лише один раз, навіть якщо цього вимагає кілька інших модулів.

Коли ви вводите один модуль в інший, ви єкажучи: "Модуль A вимагає речей з модуля B". Тепер, коли вам потрібен певний інструмент, це коли ви вводите його в контролер, щоб мати доступ до цього конкретного інструменту.

Тому врахуйте:

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

}]);

Тож тому, що ти вводиш ngFileUpload ваш контролер в myApp модуль тепер може вводити Upload сервіс від ngFileUpload модуль і контролер не потрібно турбуватися, якщо послуга присутня (якщо її немає, ви отримаєте помилку введення з кутового).