使用脚本async>用Angular.js标记
Using the <script async> tag with Angular.js
Ilya Grigorik建议尽可能使用<script async>
标签。
是否有一个干净的,首选的方式来加载一个Angular.js应用程序使用标签,而不使用工具,如require.js或$script.js工具推荐的angular-seed?
明显的问题是执行顺序。如预防:
Uncaught ReferenceError: angular is not defined
https://www.igvita.com/2014/05/20/script-injected-async-scripts-considered-harmful/如果有一些有用的东西你可以在没有angular的情况下显示(例如,使用headless浏览器预生成的内容),除了你的脚本之外没有任何东西依赖于它1,那么可以有一个解决方案:
- 使用
async
加载angular.js
- 将你的代码封装在函数体中
- 增加一个循环检查,如果
angular
被定义- 和休眠几毫秒,如果不是
- 否则,执行代码并跳出循环
这种忙碌的等待是丑陋的,但我不知道如何在加载完成时被回调。我还没试过呢。
很有可能我所做的只是框架所做的一个原始版本。
如果你不需要它在所有浏览器中工作,那么有defer
标签。对我来说,defer
看起来像async
做得对。
1所以我猜angular-route.js
或类似的用户运气不好。这只是一个猜测,因为我从来没有尝试过按顺序加载这两个
根据这个答案,您可能想尝试使用defer
而不是async
,这会导致浏览器尊重加载顺序。例如:
<script src="scripts/vendor-including-angular.js" defer></script>
<script src="scripts/your-app.js" defer></script>
您可能希望在使用async
之前将所有依赖的JS文件合并为一个。使用Grunt, Gulp, Broccoli或其他任务运行器。
如果脚本是模块化的,并且不依赖于任何脚本,则使用async。
不要在Angular.js脚本标签中使用async属性。
似乎使用异步属性是有害的。没有它,表达式在DOMContentLoaded事件上进行评估,但是使用async属性,在窗口加载事件上进行评估,这是稍后的事情。在最新版本的Firefox, Chrome和IE11中测试了Angular.js 1.0和1.4。
- Angular JS IE9 Hashbang url rewriting
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- angular.js没有'无法在PhoneGap中处理视图标记
- Angular js-返回一个包含类似
- 如何使用 Angular JS 将数据保存在数据库中
- 将Angular js与taglib结合使用
- Angular JS Filter-通过3个复选框进行筛选
- vaadin:使用自定义布局集成angular js
- angular js密码强度显示问题
- 使用angular.js问题的JavaSpringREST服务
- 将复杂对象从angular js传递到web api,它总是返回404
- entre上的angular js阻止提交
- 根据Angular.JS上一次的内容禁用选择
- 如何在angular js中使用指令.不适用于我的情况,为什么
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- angular.js:13424错误:[ng:areq]参数'fn'不是函数,getObject
- 使用Angular js-量角器e2e测试上传文件
- Angular.js延迟控制器初始化
- 如何在angular.js中动态应用自定义过滤器
- 谷歌地图/Angular JS:地图更新并不总是反映数据,并且可以't删除标记