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实现的论坛常用的运行代码的效果
Jul 15 Javascript
原始XMLHttpRequest方法详情回顾
Nov 28 Javascript
jQuery遍历Table应用示例
Apr 09 Javascript
jQuery实现鼠标划过添加和删除class的方法
Jun 26 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
Aug 25 Javascript
javascript使用Promise对象实现异步编程
Mar 01 Javascript
JavaScript学习笔记之取数组中最大值和最小值
Mar 23 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
Sep 10 Javascript
angular2系列之路由转场动画的示例代码
Nov 09 Javascript
JavaScript常见JSON操作实例分析
Aug 08 Javascript
详解react native页面间传递数据的几种方式
Nov 07 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
Aug 31 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动态生成javascript文件的2个例子
2014/04/11 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
javascript知识点收藏
2007/02/22 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
前端微信支付js代码
2016/07/25 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
JS实现百度搜索框
2021/02/25 Javascript
Python实现计算最小编辑距离
2016/03/17 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
西雅图的买手店:Totokaelo
2019/10/19 全球购物
计算机应用与科学个人的自我评价
2013/11/15 职场文书
电厂厂长岗位职责
2014/01/02 职场文书
材料会计岗位职责
2014/03/06 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
库房管理员岗位职责
2015/02/12 职场文书
银行先进个人总结
2015/02/15 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL