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 window.opener的用法分析
Apr 07 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
Feb 05 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
Jun 20 Javascript
jQuery 获取多选框的值及多选框中文的函数
May 16 Javascript
jQuery简单实现彩色云标签效果示例
Aug 01 Javascript
微信小程序 教程之wxapp 视图容器 view
Oct 19 Javascript
详解微信小程序——自定义圆形进度条
Dec 29 Javascript
JS实现运动缓冲效果的封装函数示例
Feb 18 Javascript
vue 组件 全局注册和局部注册的实现
Feb 28 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
Nov 09 Javascript
webpack 代码分离优化快速指北
May 18 Javascript
VUE实时监听元素距离顶部高度的操作
Jul 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中的函数嵌套层数限制分析
2011/06/13 PHP
php动态生成函数示例
2014/03/21 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
js中parseInt函数浅谈
2013/07/31 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
学习Vue组件实例
2018/04/28 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
浅析微信扫码登录原理(小结)
2018/10/29 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
Python实现的Excel文件读写类
2015/07/30 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
html5唤起app的方法
2017/11/30 HTML / CSS
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
教育学习自我评价
2014/02/03 职场文书
党组织公开承诺书
2014/03/29 职场文书
大学生活自我评价
2014/04/09 职场文书
小学校本培训方案
2014/06/06 职场文书
禁烟标语大全
2014/06/11 职场文书
反腐倡廉警示教育活动心得体会
2014/09/04 职场文书
车辆委托书范本
2014/10/05 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
一年级语文教学随笔
2015/08/14 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis