Existe-t-il un moyen d'injecter une dépendance tardive à un module angulaire déjà amorcé? Voici ce que je veux dire:
Dites que j'ai une application angulaire à l'échelle du site, définie comme:
// in app.js
var App = angular.module("App", []);
Et dans chaque page:
<html ng-app="App">
Plus tard, je rouvre l'application pour ajouter une logique basée sur les besoins de la page actuelle:
// in reports.js
var App = angular.module("App")
App.controller("ReportsController", ['$scope', function($scope) {
// .. reports controller code
}])
Maintenant, dire que l' un de ces bits sur la demande de la logique exige également leurs propres dépendances (comme ngTouch
, ngAnimate
, ngResource
, etc.). Comment puis-je les attacher à l'application de base? Cela ne semble pas fonctionner:
// in reports.js
var App = angular.module("App", ['ui.event', 'ngResource']); // <-- raise error when App was already bootstrapped
Je me rends compte que je peux tout faire à l'avance, c'est-à-dire -
// in app.js
var App = angular.module("App", ['ui.event', 'ngResource', 'ngAnimate', ...]);
Ou définissez chaque module seul, puis injectez tout dans l'application principale ( voir ici pour plus ):
// 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'])
Mais cela nécessitera d'initialiser l'application à chaque fois avec les dépendances de la page actuelle.
Je préfère inclure la base app.js
dans chaque page et présenter simplement les extensions nécessaires à chaque page ( reports.js
, home.js
, etc.), sans avoir à réviser la logique à chaque fois de bootstrapping ajouter ou quelque chose supprimer.
Existe-t-il un moyen d'introduire des dépendances lorsque l'application est déjà amorcée? Quelle est la ou les manières idiomatiques de procéder? Je penche vers cette dernière solution, mais je voulais voir si la façon dont je l'ai décrite pouvait également être réalisée. Merci.