当使用angular 1.2而不是1.07时,下面这段代码就不再有效了,为什么?

'use strict';

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

app.config(['$routeProvider', '$locationProvider',
    function($routeProvider, $locationProvider) {
        $locationProvider.html5Mode(true);
        $routeProvider.
        when('/', {
            templateUrl: 'part.html',
            controller: 'MyCtrl'
        }).
        otherwise({
            redirectTo: '/'
        });
    }
]);

问题出在注入器配置部分(app.config):

Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.2.0rc1/$injector/modulerr?p0=muninn&p1=Error%…eapis.com%2Fajax%2Flibs%2Fangularjs%2F1.2.0rc1%2Fangular.min.js%3A31%3A252) 

如果我没记错的话,这个问题是从angular 1.1.6开始的。


当前回答

对于那些使用压缩、捆绑和缩小文件的框架的人,请确保显式地定义每个依赖项,因为这些框架倾向于重命名变量。我在使用ASP时遇到了这种情况。NET BundleConfig.cs将我的应用程序脚本捆绑在一起。

之前

app.config(function($routeProvider) {
    $routeProvider.
      when('/', {
          templateUrl: 'list.html',
          controller: 'ListController'
      }).
      when('/items/:itemId', {
          templateUrl: 'details.html',
          controller: 'DetailsController'
      }).
      otherwise({
          redirectTo: '/'
      });
});

app.config(["$routeProvider", function($routeProvider) {
    $routeProvider.
      when('/', {
          templateUrl: 'list.html',
          controller: 'ListController'
      }).
      when('/items/:itemId', {
          templateUrl: 'details.html',
          controller: 'DetailsController'
      }).
      otherwise({
          redirectTo: '/'
      });
}]);

点击这里阅读更多关于Angular依赖注释的内容。

其他回答

如果你在控制台([$injector:nomod], MINERR_ASSET:22)中出现这个错误,请确保在加载AngularJS之前没有包含你的应用程序代码

我这样做了,一旦我修正了顺序,错误就消失了。

add to link
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.0/angular-route.min.js"></script>

var app = angular.module('apps', [ 'ngRoute' ]); 

还有一件事要添加到列表中,因为这是谷歌搜索'Error: [$injector:modulerr] angular'得到的第一个结果:

如果你在你的'index'html'和你的主javascript应用程序定义中有一个不匹配的应用程序名称,这也会产生这个错误。

例如,如果你的HTML是这样的:

    </head>
    <body ng-app="myWebSite">

        <!-- My Web Site -->
        <p>About my web site...</p>

        etc ...

和你的JavaScript看起来像这样(即有一个错别字的应用程序名称- myWebCite而不是myWebSite):

/** Main AngularJS Web Application */ 
var app = angular.module('myWebCite', [ 'ngRoute' ]); 

/** Configure the Routes */ 
app.config(['$routeProvider', function ($routeProvider) { 
  etc ...

那么也会生成'Error:[$injector:modulerr] angular'错误。

除了下面的答案,如果你在控制台([$injector:nomod], MINERR_ASSET:22)中出现这个错误,但一切似乎都正常工作,请确保你的index.html中没有重复的include。

因为如果您有使用此模块的文件的重复包含,并且包含在具有实际模块声明的文件之前,也会引发此错误。

约翰爸爸在这个相当晦涩的评论中提供了我的问题:有时当你得到这个错误时,这意味着你丢失了一个文件。其他时候,它意味着模块是在使用之后定义的。一种简单的解决方法是将模块文件命名为*.module.js并首先加载这些文件。