C'è un modo per iniettare una dipendenza tardiva a un modulo angolare già avviato? Ecco cosa intendo:
Supponiamo che io disponga di un'app angolare a livello di sito, definita come:
// in app.js
var App = angular.module("App", []);
E in ogni pagina:
<html ng-app="App">
Successivamente, riaprirò l'app per aggiungere logica in base alle esigenze della pagina corrente:
// in reports.js
var App = angular.module("App")
App.controller("ReportsController", ['$scope', function($scope) {
// .. reports controller code
}])
Ora, dire che una di quelle punte on-demand della logica richiede anche le proprie dipendenze (come ngTouch
, ngAnimate
, ngResource
, ecc). Come posso collegarli all'app di base? Questo non sembra funzionare:
// in reports.js
var App = angular.module("App", ['ui.event', 'ngResource']); // <-- raise error when App was already bootstrapped
Mi rendo conto di poter fare tutto in anticipo, ovvero -
// in app.js
var App = angular.module("App", ['ui.event', 'ngResource', 'ngAnimate', ...]);
Oppure definisci ogni modulo da solo e poi inserisci tutto nell'app principale ( vedi qui per ulteriori informazioni ):
// 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'])
Ma questo richiederà di inizializzare l'app ogni volta con le dipendenze della pagina corrente.
Io preferisco includere la base app.js
di ogni pagina e semplicemente introdurre le estensioni necessarie per ogni pagina ( reports.js
, home.js
, ecc), senza la necessità di rivedere la logica di ogni bootstrap posso aggiungere o rimuovere qualcosa.
C'è un modo per introdurre dipendenze quando l'app è già avviata? Qual è considerato il modo (o i modi) idiomatici per farlo? Sono propenso a quest'ultima soluzione, ma volevo vedere se si potesse fare anche il modo che ho descritto. Grazie.