¿Hay alguna manera de inyectar una dependencia tardía a un módulo angular ya iniciado? Esto es lo que quiero decir:
Digamos que tengo una aplicación angular en todo el sitio, definida como:
// in app.js
var App = angular.module("App", []);
Y en cada página:
<html ng-app="App">
Más tarde, reabriré la aplicación para agregar lógica según las necesidades de la página actual:
// in reports.js
var App = angular.module("App")
App.controller("ReportsController", ['$scope', function($scope) {
// .. reports controller code
}])
Ahora, decir que uno de esos bits a la carta de la lógica también requiere sus propias dependencias (como ngTouch
, ngAnimate
, ngResource
, etc). ¿Cómo puedo adjuntarlos a la aplicación base? Esto no parece funcionar:
// in reports.js
var App = angular.module("App", ['ui.event', 'ngResource']); // <-- raise error when App was already bootstrapped
Me doy cuenta de que puedo hacer todo por adelantado, es decir,
// in app.js
var App = angular.module("App", ['ui.event', 'ngResource', 'ngAnimate', ...]);
O defina cada módulo por sí solo y luego inyecte todo en la aplicación principal ( consulte aquí para obtener más información ):
// 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'])
Pero esto requerirá que inicialice la aplicación cada vez con las dependencias de la página actual.
Yo prefiero incluir el básico app.js
en cada página y simplemente presento las extensiones necesarias para cada página ( reports.js
, home.js
, etc.), sin tener que revisar la lógica de arranque cada vez que puedo añadir o eliminar algo.
¿Hay alguna forma de introducir dependencias cuando la aplicación ya está iniciada? ¿Cuál se considera la forma (o formas) idiomáticas de hacer esto? Me inclino hacia la última solución, pero quería ver si la forma que describí también se podría hacer. Gracias.