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 相关文章推荐
腾讯的ip接口 方便获取当前用户的ip地理位置
Nov 25 Javascript
基于jquery的$.ajax async使用
Oct 19 Javascript
可以用鼠标拖动的DIV实现思路及代码
Oct 21 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
Apr 25 Javascript
jQuery制作拼图小游戏
Jan 12 Javascript
Shell脚本实现Linux系统和进程资源监控
Mar 05 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
Mar 14 Javascript
浅析JavaScript中的特殊数据类型
Dec 15 Javascript
JavaScript中this关键字用法实例分析
Aug 24 Javascript
js常用正则表达式集锦
May 17 Javascript
Vue组件模板及组件互相引用代码实例
Mar 11 Javascript
javascript-hashchange事件和历史状态管理实例分析
Apr 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开发的一些注意点总结
2010/10/12 PHP
求PHP数组最大值,最小值的代码
2011/10/31 PHP
php 获取本地IP代码
2013/06/23 PHP
php表单请求获得数据求和示例
2014/05/15 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
python发送邮件脚本
2018/05/22 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
大学生四个方面的自我评价
2013/09/19 职场文书
机械专业毕业生自荐信
2013/11/02 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
创业计划书之书店
2019/09/10 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang
Elasticsearch6.2服务器升配后的bug(避坑指南)
2022/09/23 Servers