Ленивый загруженный контроллер приводит к ошибке при переходе в состояние

Получение этой ошибки...

Error: [ng:areq] Argument 'registerController' is not a function, got undefined

при попытке перехода в состояние UI-роутера...

    .state('register', {
        url: "/register",
        templateUrl: "App/components/register/registerView.html",
        data: { pageTitle: 'Register', specialClass: 'gray-bg' },
        controller: "registerController",
        resolve: { // Any property in resolve should return a promise and is executed before the view is loaded
            loadMyCtrl: ['$ocLazyLoad', function ($ocLazyLoad) {
                // you can lazy load files for an existing module
                return $ocLazyLoad.load(['App/components/register/registerController.js']);
            }]
        }
    })

Ленивый загруженный файл извлекается и запускается, вот он для информации.

var app = angular.module('application')

function registerController($scope) {
    $scope.test = "test";
};

app.controller('registerController', registerController);

Исключение выдается, когда государство пытается разрешить

controller: "registerController",

имущество. Но я знаю, что ленивый загруженный код был запущен в этот момент и что "registerController" был зарегистрирован как контроллер.

1 ответ

Решение

Так что получается, что ты не можешь этого сделать. Регистрация контроллеров описанным выше способом работает только при начальной загрузке.

Но вы можете сделать это, если вы сохраните ссылку на функцию регистра $controllerProvider в config

app.config(function ($controllerProvider) {
    app.lazy = {
        controller: $controllerProvider.register,
    };
}

а затем в вашем контроллере JS добавить контроллер, используя ссылку на функцию регистра..

var app = angular.module('application')

function registerController($scope) {

};

app.lazy.controller('registerController', ['$scope' ,registerController]);
Другие вопросы по тегам