Аргумент не является функцией, он не определен с помощью angular bootstrap, ui-router и requirejs.

Я следую примеру Дэна Уолина по динамической загрузке контроллеров с использованием requirejs, но с угловым ui-маршрутизатором.

это мое приложение.js

var bootstrapper = angular.module('etrading', ['ui.router', 'ngSanitize','kendo.directives', 'common']);

function routeProvider($stateProvider, $controllerProvider, $compileProvider, $filterProvider, $provide, routeResolverProvider) {
    $provide.decorator('$exceptionHandler', extendExceptionHandler);
    bootstrapper.register = {
        controller: $controllerProvider.register,
        directive: $compileProvider.directive,
        filter: $filterProvider.register,
        factory: $provide.factory,
        service: $provide.service
    };
    var route = routeResolverProvider.route();
    $stateProvider.state('etrading', route.resolve('shell', 'core/',  'vm')).state('equityportfolio', route.resolve('equityportfolio', 'equityportfolio/', 'vm'));
}

bootstrapper.config([
    '$stateProvider',
    '$controllerProvider',
    '$compileProvider',
    '$filterProvider',
    '$provide',
    'routeResolverProvider',
     routeProvider
]);

start.$inject = ['$state', '$rootScope', '$q', 'genXClientFactory'];
function start($state, $rootScope, $q) {
    //set the initial state
    $state.go('etrading');
}
bootstrapper.run(start);

это мой main.js для угловой начальной загрузки

   define([
    'app',
    'common/common',
    'common/routeresolver',
    'common/logger',
    'common/commonfactory',
    'common/spinner',
    'common/genxInitializer',
    'common/route'
],
function () {
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['etrading']);
    });
});

это мой метод routeresolver.route

    var route = function () {
        function resolve(baseName, path, controllerAs, secure) {
            if (!path)
                path = '';
            var routeDef = {};
            var baseFileName = baseName.charAt(0).toLowerCase() + baseName.substr(1);
            routeDef.templateUrl = viewsDirectory + path + 'views/' + baseFileName + '.html';
            routeDef.controller = baseName + 'Controller';
            if (controllerAs)
                routeDef.controllerAs = controllerAs;
            routeDef.secure = (secure) ? secure : false;
            routeDef.resolve = {
                load: [
                    '$q',
                    '$rootScope',
                    function ($q, $rootScope) {
                        var dependencies = [controllersDirectory + path + 'controllers/' + baseFileName + 'Controller.js'];
                        return resolveDependencies($q, $rootScope, dependencies);
                    }
                ]
            };
            return routeDef;
        }
        function resolveDependencies($q, $rootScope, dependencies) {
            var defer = $q.defer();
            require(dependencies, function () {
                defer.resolve();
                 $rootScope.$apply();
            });
            return defer.promise;
        }
        var jsclass = {
            resolve: resolve
        };
        return jsclass;
    };

и это контроллер, который я пытаюсь зарегистрировать

define(["require", "exports", 'app'], function (require, exports, app) {
var core;
(function (core) {
    var controller;
    (function (controller) {
        var Shell = (function () {
            function Shell($rootScope, common, config) {
            }
            Shell.$inject = ['$rootScope', 'common', 'config'];
            return Shell;
        })();
        controller.Shell = Shell;
        app.etrading.register.controller('shell', Shell);
    })(controller = core.controller || (core.controller = {}));
})(core = exports.core || (exports.core = {}));
});

Я получаю следующее: Ошибка: [ng:areq] Аргумент «shellController» не является функцией, он стал неопределенным, это при попытке разрешить зависимости. Пожалуйста, помогите мне с этим. Спасибо.


person Bhaskar    schedule 21.04.2015    source источник
comment
Извините, забыл упомянуть. я использую машинописный текст, это выведет мне requirejs AMD.   -  person Bhaskar    schedule 22.04.2015
comment
вы можете получить больше ответов, если вы также предоставите скомпилированную версию javascript - больше людей знают этот язык :)   -  person mkoryak    schedule 22.04.2015
comment
теперь он в javascript :) Я новичок в angular, поэтому буду признателен за любую помощь.   -  person Bhaskar    schedule 22.04.2015
comment
все еще жду помощи. Мой вопрос: можем ли мы добавить контроллер/сервисы в модуль после загрузки приложения с помощью UI Router?   -  person Bhaskar    schedule 22.04.2015


Ответы (1)


Выяснилось, что после успеха маршрута ui-router он проверяет, совпадает ли имя контроллера с именем контроллера, определенным в изменении состояния.

имя контроллера должно быть

 app.etrading.register.controller('shellController', Shell);

а не app.etrading.register.controller('shell', Shell);

person Bhaskar    schedule 22.04.2015