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

标签 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) {

    }

我在页面加载时在控制台中收到上述错误 - 我缺少什么?

最佳答案

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

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 的变量(该变量不存在),您的 require/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', []);

当您需要它进行配置或附加 Controller 或指令等时,您可以调用:

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

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

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

另一个提示,在进行配置或创建 Controller 时,您不必进行单独的注入(inject),您可以简单地执行以下操作:

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

需要括号符号,这样当你缩小脚本时,它不会搞砸你的注入(inject),如果你不缩小,你可以不用:

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

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

关于angularjs - Angular 1.3.10 未捕获错误 : [$injector:modulerr],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28092507/

相关文章:

jquery - IE 卡住显示来自 AngularJS 的 Bootstrap Modal

javascript - 避免在 AngularJS 中直接访问 URL

javascript - UI-Router ng-class ="$state.includes(' name')"不在指令中工作

angularjs - 从 ngRoute 迁移到 ui-router

angular - 检查 Angular 2 中是否存在路线

javascript - 如何使 ng-repeat 与返回新对象的函数一起工作?

javascript - AngularJs ngRoutes 不工作

javascript - 发送到 ngChange value from option

javascript - AngularJS 和 IE8 - 不支持的属性或方法

javascript - angular-ui-router 嵌套 View 在使用直接 url 或刷新时页面未加载