AngularJS 执行流程详细介绍


Posted in Javascript onAugust 18, 2016

一、启动阶段

        大家应该都知道,当浏览器加载一个HTML页面时,它会将HMTL页面先解析成DOM树,然后逐个加载DOM树中的每一个元素节点。我们可以把AngularJS当做一个类似jQuery的js库,我们通过<script>标签引入到HTML中,那么此时Angular就做为一个普通的DOM节点等待浏览器解析,当浏览器解析到这个节点时,发现它是一个js文件,那么浏览器会停止解析剩余的DOM节点,开始执行这个js(即angular.js),同时Angular会设置一个事件监听器来监听浏览器的DOMContentLoaded事件。当Angular监听到这个事件时,就会启动Angular应用。

        二、初始化阶段

        Angular开始启动后,它会查找ng-app指令,然后初始化一系列必要的组件(即$injector、$compile服务以及$rootScope),接着重新开始解析DOM树。

        三、编译、链接

        $compile服务通过遍历DOM树的方式查找有声明指令的DOM元素。当碰到带有一个或多个指令的DOM元素时,它会排序这些指令(基于指令的priority优先级),然后使用$injector服务查找和收集指令的compile函数并执行它。

        每个节点的编译方法运行之后,$compile服务就会调用链接函数。这个链接函数为绑定了封闭作用域的指令设置监控。这一行为会创建实时视图。

        最后,在$compile服务完成后,AngularJS运行时就准备好了。

        四、运行阶段

        Angular提供了自己的事件循环。指令自身会注册事件监听器,因此当事件被触发时,指令函数就会运行在AngularJS的$digest循环中。$digest循环会等待$watch表达式列表,当检测到模型变化后,就会调用$watch函数,然后再次查看$watch列表以确保没有模型被改变。

        一旦$digest循环稳定下来,并且检测到没有潜在的变化了,执行过程就会离开Angular上下文并且通常会回到浏览器中,DOM将会被渲染到这里。

        将以上过程的关键步骤绘制成一张图,如下:

AngularJS 执行流程详细介绍

以上就是AngularJS 执行流程的详细介绍,后续继续整理相关资料,谢谢大家对本站的支持。

Javascript 相关文章推荐
jquery下json数组的操作实现代码
Aug 09 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
Sep 10 Javascript
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
Dec 27 Javascript
jquery 插件实现瀑布流图片展示实例
Apr 03 Javascript
js实现网站最上边可关闭的浮动广告条代码
Sep 04 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
May 24 Javascript
JS触发服务器控件的单击事件(详解)
Aug 06 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
Nov 09 Javascript
js实现三级联动效果(简单易懂)
Mar 27 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
Jul 28 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
Sep 30 Javascript
jQuery实现的五星点评功能【案例】
Feb 18 jQuery
AngularJS国际化详解及示例代码
Aug 18 #Javascript
ECMAScript6轮播图实践知识总结
Aug 17 #Javascript
jQuery 全选 全部选 反选 实现代码
Aug 17 #Javascript
AngularJS 自定义指令详解及示例代码
Aug 17 #Javascript
AngularJS 依赖注入详解及示例代码
Aug 17 #Javascript
AngularJS 服务详细讲解及示例代码
Aug 17 #Javascript
深入理解jQuery layui分页控件的使用
Aug 17 #Javascript
You might like
PHP session垃圾回收机制实例分析
2019/06/28 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
再论Javascript的类继承
2011/03/05 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
Node.js返回JSONP详解
2016/05/18 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
python获取标准北京时间的方法
2015/03/24 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
python爬取音频下载的示例代码
2020/10/19 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
如何打开WebSphere远程debug
2014/10/10 面试题
标准化管理实施方案
2014/02/25 职场文书
请假条的格式
2014/04/11 职场文书
个人工作表现评价材料
2014/09/21 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
大学生见习总结报告
2015/06/24 职场文书
清明节主题班会
2015/08/14 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书