Есть ли способ вставить позднюю зависимость к уже загрунтованному модулю angular? Вот что я имею в виду:
Скажем, что у меня есть приложение 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
и т.д.), не пересматривая логику начальной загрузки каждый раз, когда я добавляю или удаляю что-либо.
Есть ли способ ввести зависимости, когда приложение уже загружено? Что считается идиоматическим способом (или путями) для этого? Я склоняюсь к последнему решению, но хотел бы посмотреть, можно ли сделать так, как я описал. спасибо.