Чи є спосіб ввести пізню залежність до вже завантаженого кутового модуля? Ось що я маю на увазі:
Скажімо, що у мене є загальнодоступний кутовий додаток, який визначається як:
// 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
, і т.д.), без необхідності перегляду самонастроювання логіки кожен раз додати або видалити що - небудь.
Чи є спосіб ввести залежності, коли програма вже завантажена? Що вважається ідіоматичним способом (або способами) зробити це? Я схиляюся до останнього рішення, але хотів би побачити, чи можна зробити так, як я описав. Дякую.