Angular 1.3.10未捕获错误:[$ injector:modulerr]

时间:2015-01-22 15:26:59

标签: angularjs angular-ui-router

此应用包含的内容很少,所以这是一个基本错误。我正在使用ui-router。这就是我在各种文件中得到的结果:

app.module.js:

'use strict';

angular
    .module('app', app);

app.$inject = [

    'ui.router',
    'ngCookies',
    'ngSanitize',

];

function app(){}

app.routes.js:

'use strict';

angular
    .module('app')
    .config(routes);

    routes.$inject = ['$stateProvider', '$urlRouterProvider', '$locationProvider'];

    function routes($stateProvider, $urlRouterProvider, $locationProvider) {

        // Remove # from url
        $locationProvider.html5Mode(true);

        // Set 404
        $urlRouterProvider.otherwise('/404');

        // Configure app states
        $stateProvider

            .state('app', {
                abstract: true,
                url: '',
                templateUrl: 'modules/app/app.html',
                controller: 'AppController'

            })
    }

app.controller.js:

'use strict';

angular
    .module('app')
    .controller('AppController', AppController);

    AppController.$inject = ['$rootScope', '$scope'];

    function AppController($rootScope, $scope) {

    }

我在页面加载时在控制台中遇到上述错误 - 我错过了什么?

3 个答案:

答案 0 :(得分:4)

您在名为$inject的变量上调用app,该变量在全局范围内不存在:

angular.module('app', app);

app.$inject = [
    'ui.router',
    'ngCookies',
    'ngSanitize',
];

现在,如果您将模块定义分配给名为app的变量,它可以工作:

var app = angular.module('app', app);

app.$inject = [
    'ui.router',
    'ngCookies',
    'ngSanitize',
];

接下来是模块定义的签名:

  

angular.module(name,[requires],[configFn]);

你再次使用一个名为app的变量(它不存在)你的requires / injectables数组应该在哪里。所以你可以这样做:

var injections = [
    'ui.router',
    'ngCookies',
    'ngSanitize',
];

var app = angular.module('app', injections);

甚至更好:(保持全球范围清晰)

var app = angular.module('app', [
    'ui.router',
    'ngCookies',
    'ngSanitize',
]);

现在你可以剥离:

app.$inject = [
    'ui.router',
    'ngCookies',
    'ngSanitize',
];

但最佳做法是尽可能保持整个全球范围的清洁。因此,您不能将模块分配给变量:

angular.module('app', []);

当您需要配置或附加控制器或指令等时,请致电:

angular.module('app').config();
angular.module('app').controller();
angular.module('app').directive();

或者你可以将它们连在一起:

angular.module('app')
    .config()
    .controller()
    .directive();

另一个提示,在进行配置或创建控制器时,您不必单独注射,您可以这样做:

angular.module('app').config([
    '$stateProvider', '$urlRouterProvider', '$locationProvider',
    function ($stateProvider, $urlRouterProvider, $locationProvider) {
      .....
    }
]);

需要使用括号表示法,因此当您缩小脚本时,它不会搞砸您的注射,如果您没有缩小,则可以不用:

angular.module('app').config(
    function ($stateProvider, $urlRouterProvider, $locationProvider) {
      .....
    }
);

我知道你的问题已经解决了,我想我应该清楚一点。祝你好运!

答案 1 :(得分:0)

该模块不喜欢像这样实例化,所以我把它改成了它并且它工作正常:

'use strict';

angular
    .module('app', [

    'ui.router',
    'ngCookies',
    'ngSanitize'    
];

答案 2 :(得分:0)

首先删除app.module.js中'ngSanitize'后的逗号:

angular
    .module('app', [

    'ui.router',
    'ngCookies',
    'ngSanitize'

];