AngularJS无法加载模块

neh*_*ehz 15 javascript html5 angularjs

编辑:这只发生在IE(在IE10上测试)

我有一个最初加载正常的应用程序,但是,当刷新它时会出现此错误:

SCRIPT5022:没有模块:myAppModule

myAppModule是在app.js中定义的角度模块,在加载angular.js后加载

angular.module('myAppModule', []);
Run Code Online (Sandbox Code Playgroud)

并通过以下方式自动引导:

<html ng-app="myAppModule">
Run Code Online (Sandbox Code Playgroud)

脚本加载如下(没有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>
Run Code Online (Sandbox Code Playgroud)

我认为angularjs首先被加载并自动引导应用程序,但app.js尚未加载

neh*_*ehz 18

好吧我不知道为什么自动引导失败,但如果我手动引导应用程序它工作正常.

例如

<html>

...

<script src="js/app.js"></script>
<script src="js/controller.js"></script>
<script>angular.bootstrap(document, ['myAppModule']);</script>
Run Code Online (Sandbox Code Playgroud)

  • 所以这是使用`ng-app`的替代方案? (2认同)

Bar*_*all 6

当我发现自己做错了什么时,我感觉自己像个白痴,但如果你像我一样,那么这里还有其他一些事要先检查一下:

  1. 确保首先加载子模块.在我的情况下,我必须确保子模块在我的父模块之前.您可以通过在每个模块init行上放置一个断点来确认这一点.
  2. 即使物理顺序正确,执行顺序仍然是关闭的.我的一个模块包含在一个自动执行的功能中,而另一个模块则没有.卫生署.
  3. 子函数中出现错误,实际上导致此错误在控制台中显示两次.这是因为我使用这样的语法:

    var mod = angular.module("blah", []);
    mod.filter("filterName", function(){ ... }); 
    
    Run Code Online (Sandbox Code Playgroud)

    在某一点上,我在启动模块时忘记了空括号,因此该行看起来像这样并抛出此错误:

    var mod = angular.module("blah");  // <-- wrong
    
    Run Code Online (Sandbox Code Playgroud)

回顾一下,确保子模块先执行并且没有错误.