编辑:这只发生在IE(在IE10上测试)
我有一个最初加载的应用程序,但是,刷新时会出现此错误:
SCRIPT5022:无模块:myAppModule
myAppModule是在app.js中定义的角度模块,在加载angular.js后加载
angular.module('myAppModule', []);
并通过以下方式自动引导:
<html ng-app="myAppModule">
脚本按如下方式加载(没有AMD加载程序):
<script>window.jQuery ||
document.write('<script src="js/vendor/jquery-1.8.0.min.js"></script>')</script>
<script>window.angular ||
document.write('<script src="js/vendor/angular-1.0.2.min.js"></script>')</script>
<script src="js/app.js"></script>
<script src="js/controller.js"></script>
我认为angularjs首先被加载并自动引导应用程序,但app.js尚未加载
答案 0 :(得分:18)
好的我不知道为什么自动引导失败,但如果我手动引导应用程序就可以正常工作。
e.g。
<html>
...
<script src="js/app.js"></script>
<script src="js/controller.js"></script>
<script>angular.bootstrap(document, ['myAppModule']);</script>
答案 1 :(得分:6)
当我发现自己做错了什么时,我感觉自己像个白痴,但如果你像我一样,那么首先要检查一些其他事情:
子函数中出现错误,导致此错误在控制台中显示两次。这是因为我使用这样的语法:
var mod = angular.module("blah", []);
mod.filter("filterName", function(){ ... });
有一次,我在启动模块时忘记了空括号,因此该行看起来像这样并抛出此错误:
var mod = angular.module("blah"); // <-- wrong
回顾一下,确保子模块先执行并且没有错误。
答案 2 :(得分:3)
我有同样的问题,仅在IE9中。较低版本的IE实际上工作得很好,新浏览器也是如此。
手动引导解决了这个问题,但是对于属于我的模块的过滤器,引发了错误“未知提供程序”。请注意,过滤器似乎仍按预期运行。
最后,解决我的问题并停止抛出错误的解决方案是简单地将模块文件重命名为与模块相同。
因此,如果我的模块名称为myAppModule
,则文件名应为myAppModule.js
而不是my_app_module.js
。
答案 3 :(得分:1)
app.config(['$stateProvider', ($stateProvider) => {
$stateProvider.state('login', {
url: '/login',
templateUrl: 'partials/login.html'
}).state('dashboard', {
url: '/dashboard',
templateUrl: 'partials/dashboard.html'
})
}])
在我看来,Internet Explorer并不喜欢箭头功能。将这些更改为function(){}表示法修复了问题:
app.config(['$stateProvider', function ($stateProvider) {
$stateProvider.state('login', {
url: '/login',
templateUrl: 'partials/login.html'
}).state('dashboard', {
url: '/dashboard',
templateUrl: 'partials/dashboard.html'
})
}])
答案 4 :(得分:0)
顺便说一下,使用Angular 1.0.6,在angular(硬编码脚本标签)之前加载jQuery会导致IE10抛出'no Module'错误。
我能找到解决问题的唯一方法是手动引导并确保在所有其他子模块引用之后加载定义模块的app.js(如Barnabas提到的那样)。