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实现鼠标滑过图片变换效果的方法
Apr 16 Javascript
javascript实现可键盘控制的抽奖系统
Mar 10 Javascript
dedecms页面如何获取会员状态的实例代码
Mar 15 Javascript
最佳的JavaScript错误处理实践
Jul 16 Javascript
再谈javascript常见错误及解决方法
Sep 16 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
Mar 02 Javascript
详解webpack自动生成html页面
Jun 29 Javascript
Vue2.0权限树组件实现代码
Aug 29 Javascript
Vue配合iView实现省市二级联动的示例代码
Jul 27 Javascript
js实现弹出框的拖拽效果实例代码详解
Apr 16 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
Nov 04 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
Oct 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与paypal整合方法
2010/11/28 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
JS实现的简单图片切换功能示例【测试可用】
2017/02/14 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
Python探索之Metaclass初步了解
2017/10/28 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
Python判断对象是否为文件对象(file object)的三种方法示例
2019/04/26 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
python mock测试的示例
2020/10/19 Python
.NET是怎么支持多种语言的
2015/02/24 面试题
关于赌博的检讨书
2014/01/24 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
珍惜水资源建议书
2014/03/12 职场文书
暑假家长评语大全
2014/04/17 职场文书
初中作文评语大全
2014/04/23 职场文书
售后客服工作职责
2014/06/16 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
2014年食堂工作总结
2014/11/20 职场文书
先进教师事迹材料
2014/12/16 职场文书
奖励通知
2015/04/22 职场文书
python中redis包操作数据库的教程
2022/04/19 Python