AngularJS Dynamiczne ładowanie kontrolera
Czytałem dużo o ładowaniu lazzy, ale napotykam problem podczas używania $ routeProvider.
Moim celem jest załadowanie pliku javascript zawierającego kontroler i dodanie trasy do tego kontrolera, który został wcześniej załadowany.
Zawartość mojego pliku javascript do załadowania
angular.module('demoApp.modules').controller('MouseTestCtrlA', ['$scope', function ($scope) {
console.log("MouseTestCtrlA");
$scope.name = "MouseTestCtrlA";
}]);
Ten plik nie jest uwzględniany, gdy wywoływany jest kątowy startowy. Oznacza to, że muszę załadować plik i utworzyć trasę do tego kontrolera.
Najpierw zacząłem pisać funkcję rozwiązywania, która musi załadować plik Javascript. Ale zadeklarowanie mojego parametru kontrolera w deklaracji trasy dało mi błąd:
„MouseTestCtrlA” nie jest funkcją, została niezdefiniowana
Oto połączenie, które próbuję ustawić:
demoApp.routeProvider.when(module.action, {templateUrl: module.template, controller: module.controller, resolve : {deps: function() /*load JS file*/} });
Z tego, co przeczytałem, parametr kontrolera powinien być zarejestrowanym kontrolerem
controller - {(string | function () =} - Kontroler fn, który powinien być powiązany z nowo utworzonym zakresem lub nazwą zarejestrowanego kontrolera, jeśli przekazany jako ciąg.
Piszę więc fabrykę, która powinna mieć możliwość załadowania mojego pliku, a następnie (styl obietnicy!) Powinienem próbować zadeklarować nową trasę.
Podał mi coś poniżej, gdzie zależności są tablicą ścieżek plików javascript do załadowania:
Stosowanie
ScriptLoader.load(module.dependencies).then(function () {
demoApp.routeProvider.when(module.action, {templateUrl: 'my-template', controller: module.controller});
});
Ładowarka skryptów
angular.module('demoApp.services').factory('ScriptLoader', ['$q', '$rootScope', function ($q, $rootScope) {
return {
load: function (dependencies)
{
var deferred = $q.defer();
require(dependencies, function () {
$rootScope.$apply(function () {
deferred.resolve();
});
});
return deferred.promise;
}
}
}]);
Problem
Nadal mam ten błąd javascript „'MouseTestCtrlA' nie jest funkcją, jest niezdefiniowany”, co oznacza, że Angular nie mógł rozwiązać „MouseTestCtrlA” jako zarejestrowanego kontrolera.
Czy ktoś może mi w tym pomóc?