Czy istnieje sposób na wstrzyknięcie późnej zależności do już załadowanego modułu kątowego? Oto o co mi chodzi:
Załóżmy, że mam aplikację kątową obejmującą całą witrynę, zdefiniowaną jako:
// in app.js
var App = angular.module("App", []);
I na każdej stronie:
<html ng-app="App">
Później ponownie otwieram aplikację, aby dodać logikę w oparciu o potrzeby bieżącej strony:
// in reports.js
var App = angular.module("App")
App.controller("ReportsController", ['$scope', function($scope) {
// .. reports controller code
}])
Teraz mówią, że jeden z tych bitów na żądanie logiki wymaga również własne zależności (jak ngTouch
, ngAnimate
, ngResource
itp). Jak mogę dołączyć je do aplikacji podstawowej? To nie wydaje się działać:
// in reports.js
var App = angular.module("App", ['ui.event', 'ngResource']); // <-- raise error when App was already bootstrapped
Zdaję sobie sprawę, że mogę wszystko zrobić z góry, tj.
// in app.js
var App = angular.module("App", ['ui.event', 'ngResource', 'ngAnimate', ...]);
Lub zdefiniuj każdy moduł osobno, a następnie wstrzyknij wszystko do głównej aplikacji ( zobacz tutaj po więcej ):
// 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'])
Ale będzie to wymagało za każdym razem zainicjowania aplikacji z zależnościami bieżącej strony.
Wolę to podstawowy app.js
w każdej strony i po prostu przedstawić wymaganych rozszerzeń (na każdej stronie reports.js
, home.js
itp), bez konieczności rewizji za każdym logiczny ładującego dodać lub usunąć coś.
Czy istnieje sposób na wprowadzenie zależności, gdy aplikacja jest już załadowana? Jaki jest idiomatyczny sposób (lub sposoby), aby to zrobić? Skłaniam się ku temu drugiemu rozwiązaniu, ale chciałem sprawdzić, czy sposób, który opisałem, również da się zrobić. dzięki.