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 相关文章推荐
cnblogs TagCloud基于jquery的实现代码
Jun 11 Javascript
五个jQuery图片画廊插件 推荐
May 12 Javascript
jquery处理页面弹出层查询数据等待操作实例
Mar 25 Javascript
IE6兼容透明背景图片及解决方案
Aug 19 Javascript
通用无限极下拉菜单的实现代码
May 31 Javascript
js仿腾讯QQ的web登陆界面
Aug 19 Javascript
JavaScript基础进阶之数组方法总结(推荐)
Sep 04 Javascript
Vue 自定义动态组件实例详解
Mar 28 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
Aug 08 Javascript
layui实现table加载的示例代码
Aug 14 Javascript
node使用Mongoose类库实现简单的增删改查
Nov 08 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
Sep 29 Javascript
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文件上传实例详解!!!
2007/01/02 PHP
php中++i 与 i++ 的区别
2012/08/08 PHP
PHP分页类集锦
2014/11/18 PHP
解放web程序员的输入验证
2006/10/06 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
Python中的多重装饰器
2015/04/11 Python
Python中的localtime()方法使用详解
2015/05/22 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
Python2与Python3的区别实例分析
2019/04/11 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
python多维数组分位数的求取方式
2020/03/03 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
快速创建python 虚拟环境
2020/11/28 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
STP的判定过程
2012/10/01 面试题
七年级英语教学反思
2014/01/15 职场文书
工作失职检讨书范文
2014/01/16 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
学生会干部任命书
2015/09/21 职场文书