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+AJAX实现无刷新下拉加载更多
Jul 03 Javascript
JavaScript正则表达式匹配 div  style标签
Mar 15 Javascript
bootstrap fileinput完整实例分享
Nov 08 Javascript
vue组件实例解析
Jan 10 Javascript
D3.js中强制异步文件读取同步的几种方法
Feb 06 Javascript
原生javascript上传图片带进度条【实例分享】
Apr 06 Javascript
vue滚动轴插件better-scroll使用详解
Oct 17 Javascript
vue中父子组件注意事项,传值及slot应用技巧
May 09 Javascript
详解小程序rich-text对富文本支持方案
Nov 28 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
Feb 28 Javascript
layui-table表复选框勾选的所有行数据获取的例子
Sep 13 Javascript
vue通过过滤器实现数据格式化
Jul 20 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 array_push 数组函数
2009/12/26 PHP
解析php开发中的中文编码问题
2013/08/08 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
2014/01/25 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
JavaScript阻止表单提交方法(附代码)
2017/08/15 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
python构建自定义回调函数详解
2017/06/20 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
python Tensor和Array对比分析
2020/01/08 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
美国宠物商店:Wag.com
2016/10/25 全球购物
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
职工运动会邀请函
2014/01/19 职场文书
《燕子专列》教学反思
2014/02/21 职场文书
节电标语大全
2014/06/23 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
导游词之云南丽江-泸沽湖
2019/09/26 职场文书
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB