Existe uma maneira de injetar uma dependência tardia em um módulo angular já inicializado? Aqui está o que quero dizer:
Digamos que eu tenha um aplicativo angular para todo o site, definido como:
// in app.js
var App = angular.module("App", []);
E em cada página:
<html ng-app="App">
Mais tarde, estou reabrindo o aplicativo para adicionar lógica com base nas necessidades da página atual:
// in reports.js
var App = angular.module("App")
App.controller("ReportsController", ['$scope', function($scope) {
// .. reports controller code
}])
Agora, dizer que um desses bits on-demand da lógica também requer suas próprias dependências (como ngTouch
, ngAnimate
, ngResource
, etc). Como posso anexá-los ao aplicativo base? Isso não parece funcionar:
// in reports.js
var App = angular.module("App", ['ui.event', 'ngResource']); // <-- raise error when App was already bootstrapped
Sei que posso fazer tudo com antecedência, ou seja -
// in app.js
var App = angular.module("App", ['ui.event', 'ngResource', 'ngAnimate', ...]);
Ou defina cada módulo por conta própria e, em seguida, injete tudo no aplicativo principal ( veja mais aqui ):
// 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'])
Mas isso exigirá que eu inicialize o aplicativo todas as vezes com as dependências da página atual.
Eu prefiro para incluir o básico app.js
em cada página e simplesmente introduzir as extensões necessárias para cada página ( reports.js
, home.js
, etc), sem ter que rever a toda lógica bootstrapping adicionar ou remover alguma coisa.
Existe uma maneira de introduzir dependências quando o aplicativo já está inicializado? Qual é a forma (ou formas) idiomática de fazer isso? Estou inclinado para a última solução, mas queria ver se a maneira que descrevi também poderia ser feita. obrigado.