Есть ли способ внедрить позднюю зависимость в уже загруженный модуль angular? Вот что я имею в виду:
Скажем, у меня есть угловое приложение для всего сайта, определенное как:
// in app.js
var App = angular.module("App", []);
И на каждой странице:
<html ng-app="App">
Позже я снова открываю приложение, чтобы добавить логику в зависимости от потребностей текущей страницы:
// in reports.js
var App = angular.module("App")
App.controller("ReportsController", ['$scope', function($scope) {
// .. reports controller code
}])
Теперь, говорят , что один из этих битов по требованию логики также требует их собственных зависимостей (например ngTouch
, ngAnimate
, ngResource
и т.д.). Как я могу прикрепить их к базовому приложению? Кажется, это не работает:
// in reports.js
var App = angular.module("App", ['ui.event', 'ngResource']); // <-- raise error when App was already bootstrapped
Я понимаю, что все могу сделать заранее, т.е.
// in app.js
var App = angular.module("App", ['ui.event', 'ngResource', 'ngAnimate', ...]);
Или определите каждый модуль отдельно, а затем вставьте все в основное приложение ( подробнее см. Здесь ):
// in reports.js
angular.module("Reports", ['ui.event', 'ngResource'])
.controller("ReportsController", ['$scope', function($scope) {
// .. reports controller code
}])
// in home.js
angular.module("Home", ['ngAnimate'])
.controller("HomeController", ['$scope', '$http', function($scope, $http){
// ...
}])
// in app.js, loaded last into the page (different for every page that varies in dependencies)
var App = angular.module("App", ['Reports', 'Home'])
Но это потребует, чтобы я каждый раз инициализировал приложение с зависимостями текущей страницы.
Я предпочитаю включать базовый код app.js
на каждую страницу и просто вводить необходимые расширения на каждую страницу ( reports.js
, home.js
и т. Д.), Без необходимости пересматривать логику начальной загрузки каждый раз, когда я что-то добавляю или удаляю.
Есть ли способ ввести зависимости, когда приложение уже загружено? Что считается идиоматическим способом (или способами) сделать это? Я склоняюсь к последнему решению, но хотел посмотреть, можно ли сделать то, что я описал. Спасибо.