未捕获错误:[$ injector:modulerr]无法使用LABJS实例化模块

Bat*_*man 4 javascript labjs angularjs

加载我的Angular应用程序时,我一直收到此错误.在Chrome中,一对夫妇刷新,我的应用程序将运行,但IE和FF是不行.

该错误将我链接到此错误页面,但我真的不明白它的含义.

我正在使用LabsJS加载我的应用程序,包括控制器和服务.

// spAppLoader.js

$LAB
    .script("../js/app.js").wait()
    .script("../js/controllers/userCtrl.js")
    .script("../js/controllers/groupCtrl.js")
    .script("../js/controllers/siteCtrl.js")
    .script("../js/services/userServices.js")
    .script("../js/services/groupServices.js")
    .script("../js/services/siteServices.js")
Run Code Online (Sandbox Code Playgroud)

标记:

<div id="mdContainer" ng-app="spApp" ng-cloak>
  ...
</div>
<script type="text/javascript" src="../js/spAppLoader.js"></script>
Run Code Online (Sandbox Code Playgroud)

我想发布更多的代码,但我不知道从哪里开始,而角度一切都在多个文件中.我通过github上传了它.

Ila*_*mer 8

您应该手动引导您的应用程序,因为您使用异步脚本加载器:

$LAB
    .script("../js/app.js").wait()
    .script("../js/controllers/userCtrl.js")
    .script("../js/controllers/groupCtrl.js")
    .script("../js/controllers/siteCtrl.js")
    .script("../js/services/userServices.js")
    .script("../js/services/groupServices.js")
    .script("../js/services/siteServices.js")
    .wait(function(){
      var root = document.getElementById('mdContainer')
      angular.bootstrap(root ,['spApp']);
    })
Run Code Online (Sandbox Code Playgroud)

什么是自举?

angular.bootstrap(root ,['spApp']);是相同的,<div id="mdContainer" ng-app="spApp">只有最后一个会在DOMContentLoaded event发生时自动初始化您的应用程序.

使用脚本加载器时,DOMContentLoaded event可能会在加载所有脚本之前发生,因此您必须等待所有模块脚本 ,然后手动引导应用程序.

在您的情况下,chrome可能会缓存您的脚本,因此在DOMContentLoaded event完成所有脚本加载后很少刷新.

来自文档:

自动初始化

Angular在DOMContentLoaded事件时自动初始化,或者在评估angular.js脚本时,如果此时document.readyState设置为'complete'.此时,Angular会查找指定应用程序根目录的ng-app指令...

手动初始化

如果需要对初始化过程有更多控制权,可以使用手动引导方法.您需要执行此操作的示例包括使用脚本加载器或在Angular编译页面之前执行操作的需要.