angular.js实现数据双向通信的原理

angular的核心特性有:MVVM、模块化、依赖注入、自动化双向数据绑定、语义标签等。

1、AngularJS的scopes对象

AngularJS的scopes对象,是一般的javascript对象,可以在他们上面绑定属性和其他对象,也可以添加一些功能,用于观察数据结构上的变化。观察功能都由dirty-checking来实现,并且都在一个digest循环中被执行。

2、angular.js主要通过scopes实现数据双向绑定,scopes包括四个主要部分:

A、digest循环以及dirty-checking,包括watch    digest    $apply

B、Scope继承,这项机制使得我们可以创建scope继承来分享数据和事件

C、集合(数组和对象),有效的dirty-checking

D、事件系统(on),on   emit    $broadcast

3、上面的A是用来实现数据的双向绑定的原理,下面主要讲解A

a、浏览器事件循环和angular.js扩展

浏览器一直在等待指定事件的响应,比如下面的事件:

● DOM事件,譬如用户输入文本,点击按钮等(ng-click)

● XHR响应事件($http)

● 浏览器location变更事件($location)

● Timer事件($timeout,$interval)

一旦有指定的事件触发,事件的回调函数就会在javascript的解析器里面执行,然后就可以做任何的DOM操作。等回调函数执行完毕时,浏览器就会相应的对DOM作出变化。

angular.js拓展了这个事件循环,生成一个有时成为angular  context的执行环境。

b、watch队列(watch  list)

每次绑定一些东西到UI上时,就会往$watch队列里面插入一条$watch,想象一下$watch就是那个可以检测、监视的model里有变化的东西。当模板加载完成时,也就是在linking阶段(angular分为compole阶段和linking阶段),angular注释器会寻找每个directive,然后生成每个需要的$watch。

c、$digest循环

在a步骤中有提到angular.js扩展循环事件,当浏览器接收到可以被angular  context处理的事件时,digest循环就会触发。

digest循环有两部分组成:

● 一个处理evalAsync队列

● 另一个处理watch队列

digest将会遍历我们的watch,然后询问他是否有属性和值变化,直到$watch队列都检查过。

这就是所谓的dirty-checking。当$watch有更新过,这个循环就会再次触发,直到所有的$watch都没有变化。这样就能够保证每个model都不变化了。如果循环超过10次,将会抛出一个异常,防止无限循环。当$digest循环结束时,DOM相应的变化。

d、通过$apply来进入angular  context

$apply决定哪些事件进入angular  context,哪些事件不进入。

当指定事件触发时,调用apply,然后进入angular  context,如果没调用就不会进入angular  context,$digest永远不会执行。

待续。。。。

原文链接

angular.js实现数据双向通信的原理相关推荐

  1. angular js 循环数据(死数据) 添加数据 隔行换色 单个删除 排序

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. Vue源码解读一:Vue数据响应式原理

    这方面的文章很多,但是我感觉很多写的比较抽象,本文会通过举例更详细的解释.(此文面向的Vue新手们,如果你是个大牛,看到这篇文章就可以点个赞,关掉页面了.)通过阅读这篇文章,你将了解到: 1.Vue数 ...

  3. 面向初学者的带MVC API的Angular Js Table CRUD MSSQL

    目录 介绍 Angular Js代码要点 示例截图 第一部分 第二部分(ASP.NET MVC WEB API和数据表) 第三部分(关于Postman发布和测试API) 注意 结论 介绍 本文主要介绍 ...

  4. 用angular JS和 bootstrap完成一个简单的购物车界面

    初学angularJS,自己做一个简单的demo玩一下. 购物车界面:(1)能显示商品基本信息:           (2)能对购买数量进行修改: (3)能够删除不想购买的商品:   (4)能够自动计 ...

  5. angular.js前端和后台的数据交换,后台取不到值对应方案

    2019独角兽企业重金招聘Python工程师标准>>> 环境:angular.js+sastruts+apache-tomcat 最近在学习前端的一个设计工具angular.js,数 ...

  6. Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle...

    Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle 1. 主键1 2. uniq  index2 3.  ...

  7. 七步从Angular.JS菜鸟到专家(2):Scopes

    这是"AngularJS - 七步从菜鸟到专家"系列的第二篇. 在第一篇我们展示了如何开始搭建一个Angular应用.在这一篇里,我们要讨论一个理解AngularJS运作原理所必须的基本概念,以及你如 ...

  8. 七步走 Angular.js 从菜鸟到专家 (系列列表)

    Angular.js 是一个MV*(Model-View-Whatever,不管是MVC或者MVVM,统归MDV(model Drive View))JavaScript框架,其是Google推出的S ...

  9. 通过Web Api 和 Angular.js 构建单页面的web 程序

    在传统的web 应用程序中,浏览器端通过向服务器端发送请求,然后服务器端根据这个请求发送HTML到浏览器,这个响应将会影响整个的页面,比如说:用户通过一个连接导航到一个页面,会发送一个请求到服务器端, ...

最新文章

  1. linux程序移植到vxworks,VxWorks入门(一):VxWorks Vs Linux
  2. 宅家学习秘密武器!让时间从视频流和朋友圈中回到程序员的视野中吧!
  3. C++ Primer 第11章 习题11.16
  4. efcore mysql坑,.net core 2.1 使用ef DBfirst 生成 实体映射遇到的坑 (Pomelo.EntityFrameworkCore.MySql 篇)...
  5. 结构型模式-装饰模式(扩展系统功能)
  6. 码支付如何对接网站_做“刷脸支付”怎么推广?怎么办理刷脸支付POS机?
  7. 创意油墨飞溅效果的绿树矢量素材
  8. java课设单链式存储心得报告_队列的链式存储方式的实现(Java语言描述)
  9. windows 系统快捷键小技巧
  10. 海马模拟器linux,Droid4X Mac版-海马玩模拟器Mac版下载 V0.8.3Beta-PC6苹果网
  11. Elasticsearch 拼音分词器
  12. 人体神经系统分布图高清,神经系统图片高清
  13. 北大中文核心期刊目录(2004年版)工业技术类
  14. flink作业提交流程
  15. 人性化,中国制造新境界
  16. Linux查看用户登录的历史记录
  17. 数据库三种概念模型——层次模型,网状模型,关系模型的优缺点总结
  18. 亲爱的老狼-定位position的应用
  19. R语言数据处理 之 创建新变量
  20. c语言:判断某人是否属于肥胖体型。根据身高与体重因素,医务工作者经广泛的调查分析给出了以下按“体指数”对肥胖程度的划分:体指数t=w/(h*h)(w为体重,单位为kg,h为身高,单位为m)。

热门文章

  1. 联想微型计算机如何更改主题,联想vibe怎么更换主题 联想vibe主题更换方法【图文】...
  2. rcnn 回归_基础目标检测算法介绍:CNN、RCNN、Fast RCNN和Faster RCNN
  3. 【轻松一刻】Giriboy、Heize《We don't talk together》MV
  4. surface下录屏小众软件FastStone快捷键的使用
  5. 计算机一级考试成绩分析,计算机一级考试成绩分析与总结
  6. 利用Swiss-model API进行蛋白序列提交及蛋白结构建模
  7. 为什么要搭建独立商城系统,这7个理由说明一切
  8. 低代码可视化平台为智慧矿山系统开发提速
  9. mac系统如何进入系统偏好设置_如何更改macOS系统偏好设置的布局 | MOS86
  10. 借助“云上”SPSS降低未来数据分析的不确定性