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 相关文章推荐
js控制的回到页面顶端goTop的代码实现
Mar 20 Javascript
javascript常见用法总结
May 22 Javascript
判断window.onload是否多次使用的方法
Sep 21 Javascript
jQuery中:checked选择器用法实例
Jan 04 Javascript
javascript实现简单的鼠标拖动效果实例
Apr 10 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
Mar 30 Javascript
ECMAScript6--解构
Mar 30 Javascript
Vue框架之goods组件开发详解
Jan 25 Javascript
微信小程序使用swiper组件实现层叠轮播图
Nov 04 Javascript
Vuex mutitons和actions初使用详解
Mar 04 Javascript
element-ui上传一张图片后隐藏上传按钮功能
May 22 Javascript
Node在Controller层进行数据校验的过程详解
Aug 28 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实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
微信小程序如何实现在线客服功能
2019/10/16 Javascript
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
简单说明Python中的装饰器的用法
2015/04/24 Python
Python使用MONGODB入门实例
2015/05/11 Python
详解Django中的过滤器
2015/07/16 Python
详解Python核心对象类型字符串
2018/02/11 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
Django单元测试工具test client使用详解
2019/08/02 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
利用scikitlearn画ROC曲线实例
2020/07/02 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
详解px单位html5响应式方案
2018/03/08 HTML / CSS
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
德尔福集团DELPHI的笔试题
2012/02/22 面试题
发展部经理职责规定
2014/02/22 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
销售助理岗位职责
2015/02/11 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL