在不同的 MVVM 框架中,实现双向数据绑定的技术有所不同。

Angular数据绑定

Angular 采用“脏值检测”的方式,数据发生变更后,对于所有的数据和视图的绑定关系进行一次检测,识别是否有数据发生了改变,有变化进行处理,可能进一步引发其他数据的改变,所以这个过程可能会循环几次,一直到不再有数据变化发生后,将变更的数据发送到视图,更新页面展现。如果是手动对 ViewModel 的数据进行变更,为确保变更同步到视图,需要手动触发一次“脏值检测”。

Vue数据绑定

Vue 则使用 ES5 提供的 Object.defineProperty() 方法,监控对数据的操作,从而可以自动触发数据同步。并且,由于是在不同的数据上触发同步,可以精确的将变更发送给绑定的视图,而不是对所有的数据都执行一次检测。数据与视图的绑定与同步,最终体现在对数据的读写处理过程中,也就是 Object.defineProperty() 定义的数据 set、get 函数中。在对数据进行读取时,如果当前有 Watcher(对数据的观察者,watcher 会负责将获取的新数据发送给视图),那将该 Watcher 绑定到当前的数据上(dep.depend(),dep 关联当前数据和所有的 watcher 的依赖关系),是一个检查并记录依赖的过程。而在对数据进行赋值时,如果数据发生改变,则通知所有的 watcher(借助 dep.notify())。这样,即便是我们手动改变了数据,框架也能够自动将数据同步到视图。

React数据绑定

React采用这种方式,考虑虚拟DOM树的更新:

属性更新,组件自己处理

结构更新,重新“渲染”子树(虚拟DOM),找出最小改动步骤,打包DOM操作,给真实DOM树打补丁

单纯从数据绑定来看,React虚拟DOM没有数据绑定,因为setState()不维护上一个状态(状态丢弃),谈不上绑定

从数据更新机制来看,React类似于提供数据模型的方式(必须通过state更新)

没有双向数据绑定的话,input的双向场景要怎么实现?通过框架提供的API,手动通知数据变化,和操作DOM的方式很像

Angular和Vue共同点

Vue 和 AngularJS 中,都是通过在 HTML 中添加指令的方式,将视图元素与数据的绑定关系进行声明

angular 强制更新视图_angular,vue,react数据双向绑定原理分析相关推荐

  1. vue的数据双向绑定原理

    前言: 什么是数据双向绑定? vue是一个mvvm框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化,数据也会跟着同步变化.这也算是vue的精髓之处了.单项数据绑定是使用状 ...

  2. Vue数据绑定以及双向绑定原理分析

    效果 分析 已经了解到vue是通过数据劫持的方式来做数据绑定的,其中最核心的方法便是通过Object.defineProperty()来实现对属性的劫持,达到监听数据变动的目的,无疑这个方法是本文中最 ...

  3. 西安电话面试:谈谈Vue数据双向绑定原理,看看你的回答能打几分

    最近我参加了一次来自西安的电话面试(第二轮,技术面),是大厂还是小作坊我在这里按下不表,先来说说这次电面给我留下印象较深的几道面试题,这次先来谈谈Vue的数据双向绑定原理. 情景再现: 当我手机铃声响 ...

  4. Vue的数据双向绑定和Object.defineProperty()

    Vue是前端三大框架之一,也被很多人指责抄袭,说他的两个核心功能,一个数据双向绑定,一个组件化分别抄袭angular的数据双向绑定和react的组件化思想,咱们今天就不谈这种大是大非,当然我也没到达那 ...

  5. this指向-作用域、作用域链-预解析 变量提升-Vue组件传值 父子 子父 非父子-Vue数据双向绑定原理

    目录 this指向 作用域.作用域链 预解析 变量提升 Vue组件传值 父子 子父 非父子 Vue数据双向绑定原理 1.this指向 函数的this指向 看调用.不看声明 (1)普通函数调用 ①函数名 ...

  6. Vue 3.0双向绑定原理的实现

    proxy方法 vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过new Proxy()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调. Vu ...

  7. angular 强制更新视图_angular4强制刷新视图的方法

    angular4强制刷新视图的方法 使用angular的过程中有时会出现数据已经更新了,但是对于的视图没有更新,针对这一情况,可以是用angular提供的方法强制更新视图. 这里使用NGZone来更新 ...

  8. vue数据双向绑定原理

    vue 双向绑定原理 官网–https://cn.vuejs.org/v2/guide/reactivity.html 1.vue双向数据绑定是 通过 数据劫持 并结合 发布-订阅模式 的方法来实现的 ...

  9. Vue数据双向绑定原理(vue2向vue3的过渡)

    众所周知,Vue的两大重要概念: 数据驱动 组件系统 接下来我们浅析数据双向绑定的原理 一.vue2 1.认识defineProperty vue2中的双向绑定是基于defineProperty的ge ...

最新文章

  1. Jenkins构建Maven聚合工程,指定构建子模块
  2. 基础知识--:before伪元素和:after伪元素
  3. 自动化测试框架搭建-日志-2
  4. SpringMVC拦截器-快速入门(应用)
  5. 2018.2.2PHPstrom破解版
  6. javascript中this值的引用
  7. Setup Factory 打包工具部分功能代码解
  8. 三国志·魏书·田豫传
  9. 计算机表格的名次怎么弄,excel表格函数名次怎么做
  10. linux解压rar文件,linux下解压rar文件
  11. Django6:应用及分布式路由
  12. 阿里云国际站:阿里云服务器遇到了CC攻击怎么处理防护措施?
  13. Memcached应用总结
  14. AD中的机械尺寸定位的使用
  15. 共享网络打印机无法连接计算机,共享打印机连不上的解决方法-电脑自学网
  16. wpf toolbar右对齐_侧方停车是与旁车对齐还是反光镜对B柱?有什么停车技巧吗
  17. TCP协议发送SKB时ip_summed成员的设置 http://blog.csdn.net/justlinux2010/article/details/8508455
  18. 产品智慧化 智慧水务企业探索水厂建设新模式
  19. Ania and Minimizing
  20. 苹果悬浮球_幽眼进阶:苹果优化+安卓内测发布!

热门文章

  1. 26. Remove Duplicates from Sorted Array【easy】
  2. Java 实现 AES 加解密
  3. Mvc.Ext.Net项目架构(一)
  4. easyui 使用笔记
  5. PKU3259-Wormholes(SPFA判断负环,含题意)
  6. Silverlight3 加载其他xap
  7. Android中在SurfaceView上高效绘图
  8. No module named ‘pyqt5‘解决办法
  9. Linux为什么虚拟内存大于物理内存?
  10. C++之安装boost库