[英]AngularJS 1.2 $injector:modulerr
當使用 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 開始的。
該問題是由於缺少包含 ngRoute 模塊引起的。 從 1.1.6 版開始,它是一個單獨的部分:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular-route.min.js"></script>
var app = angular.module('myapp', ['ngRoute']);
通過在最后添加這個“()”,我的錯誤消失了
(function(){
var home = angular.module('home',[]);
home.controller('QuestionsController',function(){
console.log("controller initialized");
this.addPoll = function(){
console.log("inside function");
};
});
})();
要添加到列表中的另一件事,因為這是谷歌搜索“錯誤:[$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' 錯誤也會產生。
菜鳥錯誤可能是忘記包含模塊 js
<script src="app/modules/myModule.js"></script>
index.html 中的文件
如果您在控制台中有此錯誤([$injector:nomod], MINERR_ASSET:22)
,請確保在加載AngularJS
之前沒有包含您的應用程序代碼
我正在這樣做,一旦我修復了訂單,錯誤就消失了。
對於那些使用壓縮、捆綁和縮小文件的框架的人,請確保您明確定義每個依賴項,因為這些框架傾向於重命名您的變量。 我在使用 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.module
的第二個參數angular.module
引起的 - 希望這可以幫助遇到相同問題的人。
angular.module('MyApp');
angular.module('MyApp', []);
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' ]);
我遇到了同樣的問題並嘗試了所有可能的解決方案。 但最后我從文檔中了解到ngRoute
模塊現在是分離的。 看看這個鏈接
解決方案:在angular.min.js腳本之后添加cdn angular-route.js
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-route.js"></script>
此錯誤的另一個觸發因素是離開“。” 在您的“否則”或您的路線定義中的任何其他路線之前:
app.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/view1', {
templateUrl: 'partials/view1.html',
controller: 'Ctrl1'
}).
otherwise({
redirectTo: '/viewCounts'
});
}]);
再次被句號羞辱。 必須愛JS!
除了下面的答案,如果您在控制台( [$injector:nomod]
, MINERR_ASSET:22
)中[$injector:nomod]
此錯誤,但一切似乎都正常,請確保您的 index.html 中沒有重復包含。
因為如果您有重復的包含使用此模塊的文件並且包含在具有實際模塊聲明的文件之前,也會引發此錯誤。
如果你通過 angularjs 的官方教程https://docs.angularjs.org/tutorial/step_07
注意:從 AngularJS 1.2 版開始,ngRoute 在它自己的模塊中,必須通過加載額外的 angular-route.js 文件來加載,我們通過上面的 Bower 下載。
另請注意 ngRoute api https://docs.angularjs.org/api/ngRoute
安裝首先在 HTML 中包含 angular-route.js:
您可以從以下位置下載此文件:
Google CDN eg //ajax.googleapis.com/ajax/libs/angularjs/XYZ/angular-route.js Bower eg bower install angular-route@XYZ code.angularjs.org eg "//code.angularjs.org/XYZ/ angular-route.js”,其中 XYZ 是您正在運行的 AngularJS 版本。
然后通過將其添加為依賴模塊將模塊加載到您的應用程序中:
angular.module('app', ['ngRoute']); 有了它,你就可以開始了!
John Papa 就這個相當晦澀的評論提供了我的問題:有時,當您收到該錯誤時,這意味着您丟失了一個文件。 其他時候這意味着模塊是在使用后定義的。 一種輕松解決此問題的方法是將模塊文件命名為 *.module.js 並首先加載它們。
它是注射器錯誤。 您可能使用了大量 JavaScript 文件,因此可能缺少注入器。
有些在這里:
var app = angular.module('app',
['ngSanitize', 'ui.router', 'pascalprecht.translate', 'ngResource',
'ngMaterial', 'angularMoment','md.data.table', 'angularFileUpload',
'ngMessages', 'ui.utils.masks', 'angular-sortable-view',
'mdPickers','ngDraggable','as.sortable', 'ngAnimate', 'ngTouch']
);
請檢查您需要在app.js
插入的注入器
我的問題出在 config.xml 中。 改變:
<access origin="*" launch-external="yes"/>
到
<access origin="*"/>
修好了。
有時,當您在項目之間切換並在同一端口上一個接一個地運行項目時,我會看到此錯誤。 在這種情況下,轉到 chrome Developer Tools > Network 並嘗試檢查實際編寫的 js 文件: if the file match with the workspce
。 要解決此問題,請選擇Disable Cache
網絡下的Disable Cache
。
幾個月后,我回來開發 AngularJS ( 1.6.4 ) 應用程序,為此我在開發過程中選擇了 Chrome (PC) 和 Safari (MAC) 進行測試。 此代碼在IE 11.0.9600 (Windows 7,32位)上顯示此錯誤:$injector:modulerr 模塊錯誤。
經過調查,很明顯錯誤是由於使用了forEach循環,只需將所有forEach循環替換為正常的for循環即可按原樣工作......
它基本上是一個 IE11 問題( 在此處回答)而不是 AngularJS 問題,但我想把這個回復放在這里,因為引發的異常是一個 AngularJS 異常。 希望它能幫助我們中的一些人。
相似地。 不要使用 lambda 函數...只需將 ()=>{...} 替換為好的 ol' function(){...}
我遇到了這個問題,在逐行檢查我的代碼后,我看到了這個
<textarea class="form-control" type="text" ng-model="WallDesc" placeholder="Enter Your Description"/>
我只是把它改成
<textarea class="form-control" type="text" ng-model="WallDesc" placeholder="Enter Your Description"></textarea>
它奏效了。 所以檢查你的標簽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.