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 相关文章推荐
关于Javascript 的 prototype问题。
Jan 03 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
Aug 14 Javascript
JS异常处理的一个想法(sofish)
Mar 14 Javascript
JS写的贪吃蛇游戏(个人练习)
Jul 08 Javascript
ext中store.load跟store.reload的区别示例介绍
Jun 17 Javascript
js读取json的两种常用方法示例介绍
Oct 19 Javascript
jQuery中extend函数详解
Feb 13 Javascript
判断JS对象是否拥有某属性的方法推荐
May 12 Javascript
JS document对象简单用法完整示例
Jan 14 Javascript
layui实现显示数据表格、搜索和修改功能示例
Jun 03 Javascript
jQuery zTree如何改变指定节点文本样式
Oct 16 jQuery
element-ui 弹窗组件封装的步骤
Jan 22 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扩展模块memcached长连接使用方法分析
2014/12/24 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
YII框架关联查询操作示例
2019/04/29 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
jQuery实现MSN中文网滑动Tab菜单效果代码
2015/09/09 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
js实现城市级联菜单的2种方法
2017/06/23 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
webpack的pitching loader详解
2019/09/23 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
Python脚本实现虾米网签到功能
2016/04/12 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
Python中垃圾回收和del语句详解
2018/11/15 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
使用python求解二次规划的问题
2020/02/29 Python
如何在django中运行scrapy框架
2020/04/22 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
介绍一下Ruby的特点
2013/01/20 面试题
中班中秋节活动反思
2014/02/18 职场文书
绿化工程实施方案
2014/03/17 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
实操Python爬取觅知网素材图片示例
2021/11/27 Python
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android
JS高级程序设计之class继承重点详解
2022/07/07 Javascript