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 相关文章推荐
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
Aug 21 Javascript
如何让DIV可编辑、可拖动示例代码
Sep 18 Javascript
js对象的复制继承实例
Jan 10 Javascript
jQuery中的Deferred和promise 的区别
Apr 03 Javascript
KnockoutJs快速入门教程
May 16 Javascript
Google 地图API资料整理及详细介绍
Aug 06 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
Aug 29 Javascript
js实现html table 行,列锁定的简单实例
Oct 13 Javascript
jquery获取easyui日期控件的值实现方法
Nov 09 Javascript
Vue-Access-Control 前端用户权限控制解决方案
Dec 01 Javascript
JavaScript实现快速排序的方法分析
Jan 10 Javascript
小程序云开发之用户注册登录
May 18 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 mcrypt可逆加密算法分析
2011/07/19 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
jquery select下拉框操作的一些说明
2010/04/02 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
Python中input与raw_input 之间的比较
2017/08/20 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
python实现石头剪刀布程序
2021/01/20 Python
Python中文编码知识点
2019/02/18 Python
在Python中COM口的调用方法
2019/07/03 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
Django 返回json数据的实现示例
2020/03/05 Python
Python bisect模块原理及常见实例
2020/06/17 Python
Python如何将装饰器定义为类
2020/07/30 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
五型班组建设方案
2014/02/10 职场文书
购房意向书
2014/04/01 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
执行力心得体会范文
2016/01/11 职场文书
创业计划书之面包店
2019/09/17 职场文书
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫