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» в качестве зарегистрированного контроллера.

Может кто-нибудь помочь мне в этом вопросе, пожалуйста?

Ответы на вопрос(1)

Ваш ответ на вопрос