错误:[$ injector:modulerr]

时间:2014-02-03 22:19:55

标签: javascript angularjs

我是新手。只是学习/尝试将Angular与我的webapp集成(Java + jQuery + requireJS)。我没有使用任何路由器,下面是我的脚本。从其他stackoverflow我了解到这个错误是由于缺少ngRoute模块的包含。从版本1.1.6开始,它是一个单独的部分。但在我的下面的代码中,我根本不使用任何ngRouter。当我没有引用它时,为什么我会收到此错误?

错误:[$ injector:modulerr]由于以下原因无法实例化模块计数器:[$ injector:nomod]模块'计数器'不可用!您要么错误拼写了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。 http://errors.angularjs.org/1.2.11/ $注射器/ NOMOD?P0 =计数器

模板:

<ul ng-app="counter" ng-controller="counterController">
<li>
   <span class="ui-button-text" ng-bind="critical"></span>
</li>
<li>
   <span class="ui-button-text" ng-bind="error"></span>
</li>
<li>
   <span class="ui-button-text" ng-bind="warn"></span>
</li>
<li>
   <span class="ui-button-text" ng-bind="note"></span>
</li>
</ul>

JS

requirejs.config({
  paths : {  angular: "/js/lib/angular/angular.min" },
  shim : {  "angular": {  deps: [ "jquery"],  exports: "angular" } }
});

require(["angular", "jquery"],function() {

var module = angular.module('counter', []);

module.controller('CounterController', function ($scope, $http, $timeout) {
    $scope.critical = 0;
    $scope.error = 0;
    $scope.warn = 0;
    $scope.note = 0;

    function setData(d){
        $scope.critical = d.critical;
        $scope.error = d.error;
        $scope.warn = d.warn;
        $scope.note = d.note;
    }

    var getCounters = function() {
        var config = {headers: {
                'X-MY-Request': (new Date()).getMilliseconds()
            }
        };

        $http.get('xxxxxxx', config)
                .success(function(data, status, headers, config) {
            setData(data);
            $timeout(getCounters, 60000);
        }).error(function(data, status, headers, config) {
            // Handle the error
        });

    }


    $timeout(getCounters, 500);
});

4 个答案:

答案 0 :(得分:3)

在您的模板中,您的控制器名称具有小写的开头字母counterController。你的js有一个大写的CounterController。这可能是问题吗?

任何未找到的注入模块都会引发错误。不只是ngRoute。

修改

我只是把一个快速的掠夺者扔在一起而没有“要求”的东西,所有的代码都是正确的。所以,你不会错过角度代码中的任何内容。所有模块都在工作。

所以问题必须在于'require'设置。我实际上从未使用它,所以无法真正帮助你。在这里查看更多Angular + Requirejs - Loading in the wrong order

现在,如果我是你,我会一次学习一项技术。只需加载angular和jquery资源,然后学习如何使用它们。然后当你变得更加舒适时添加'require'。

答案 1 :(得分:1)

有同样的问题,要获得有关错误的更多信息,请使用{debugInfoEnabled: true}调用bootstrap函数,如下所示:

angular.bootstrap(document.getElementById('app-root'), ['MyApp'], {debugInfoEnabled: true});

这将向控制台打印出未能实例化的下划线模块。

答案 2 :(得分:0)

如果$injector:modulerr出现在您的测试框架中,您可能还必须在测试框架中包含该模块。对我而言,需要包含的业力和幻想: 测试/ karma.config.js

答案 3 :(得分:0)

我的root应用模块未加载时遇到此错误。

最终,我重新排序了我的依赖列表,并且错误消失了。

希望有人帮助。花了我一个小时!