AngularJS Динамическая загрузка контроллера
Я много читал о отложенной загрузке, но столкнулся с проблемой при использовании $ routeProvider.
Моя цель - загрузить файл javascript, который содержит контроллер, и добавить маршрут к этому контроллеру, который был загружен ранее.
Содержимое моего файла JavaScript для загрузки
angular.module('demoApp.modules').controller('MouseTestCtrlA', ['$scope', function ($scope) {
console.log("MouseTestCtrlA");
$scope.name = "MouseTestCtrlA";
}]);
Этот файл не включается, когда вызывается угловой загрузчик. Это означает, что я должен загрузить файл и создать маршрут к этому контроллеру.
Сначала я начал писать функцию разрешения, которая должна загружать файл Javascript. Но объявление моего параметра контроллера в объявлении маршрута дало мне ошибку: '
MouseTestCtrlA» не является функцией, получил неопределенный
Вот звонок, который я пытаюсь установить:
demoApp.routeProvider.when(module.action, {templateUrl: module.template, controller: module.controller, resolve : {deps: function() /*load JS file*/} });
Из того, что я прочитал, параметр контроллера должен быть зарегистрированным контроллером
контроллер - {(строка | функция () =} - Контроллер fn, который должен быть связан с вновь созданной областью или именем зарегистрированного контроллера, если он передан в виде строки.
Поэтому я пишу фабрику, которая должна загружать мой файл, а затем (обещаю стиль!) Я попытаюсь объявить новый маршрут.
Это дало мне что-то вроде ниже, где зависимости это массив файлов JavaScript ' пути для загрузки:
использование
ScriptLoader.load(module.dependencies).then(function () {
demoApp.routeProvider.when(module.action, {templateUrl: 'my-template', controller: module.controller});
});
Скрипт загрузчик
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;
}
}
}]);
проблема
У меня все еще есть эта ошибка JavaScript "MouseTestCtrlA» не является функцией, получил неопределенный что означает, что Angular не может быть решен »MouseTestCtrlA» в качестве зарегистрированного контроллера.
Может кто-нибудь помочь мне в этом вопросе, пожалуйста?