为什么AngularJS不能使用多个延迟脚本?

时间:2016-02-01 16:09:44

标签: javascript html angularjs deferred

我的HTML底部有以下内容:

<script defer="defer" src="http://localhost:8080/bower_components/jquery/dist/jquery.min.js"></script>
<script defer="defer" src="http://localhost:8080/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
<script defer="defer" src="http://localhost:8080/apps/promotion/active.js">
    // "Gulped" angular, ngAnimate, ui.bootstrap, and my angular app; in that order.
</script>
</body>
</html>

在随机时间,刷新页面时会出现此错误:

Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.4.9/$injector/modulerr?p0=activePromos&p1=Err…20(http%3A%2F%2Flocalhost%3A8080%2Fapps%2Fpromotion%2Factive.js%3A1%3A7124)

有时会连续多次刷新,有时它会连续多次刷新。然而,有时我会收到错误并且会让人讨厌。

我发现的内容如下:如果我删除了jquerybootstrap脚本,那么我只有script(active.js)和{{1} }属性,它始终有效。我试图在页面按指定顺序加载完成后加载脚本。

我应该以不同的方式做这件事(requirejs?)?我假设使用defer并按顺序放置脚本会有所帮助,因为我之前已经完成过,但不是AngularJS。 我主要是试图利用浏览器的并行下载而不是拥有一个巨大的JS文件,因为该页面只有1个图像和2个CSS文件。

1 个答案:

答案 0 :(得分:5)

在加载所有必需的JavaScript文件之前,角度应用程序将无法正确初始化。

由于您要推迟加载这些文件,因此需要等到所有文件都加载完毕,然后使用AngularJS's bootstrap function手动初始化应用程序。