数据双向绑定浅析

本文探讨了数据双向绑定的概念,重点分析了Angular的digest循环、watch队列、$digest与$apply的区别,以及Vue如何通过Object.defineProperty实现数据劫持和发布-订阅者模式。文章比较了两者在数据变更时的处理方式和性能差异,强调理解不同框架的绑定机制在实际应用中的重要性。
摘要由CSDN通过智能技术生成

近期看到一篇文章关于jquerymy.js ,是一个关于数据双向绑定的库,就想先把之前对于angular和vue的双向数据绑定给梳理一下。

数据绑定其实跟框架的设计模式相关,主要有MVC,MVP,MVVM三种,可参考我总结的另一篇文章 浅析MVC,MVP,MVVM

angular数据双向绑定模块:

angular其实是从MVC发展过来(MVC的界面和逻辑关联紧密,数据直接从数据库读取),慢慢演变为MVVM模式(MVVM的界面与viewmodel耦合比较松,界面数据是从viewmodel中获取的,也就是Scope),其实设计模式没什么关系,只要适合自己的项目就可以了。

angular的双向绑定主要是digest循环以及dirty-checking(脏数据检查),包括watch,digest,和apply。

1.Angular在浏览器循环监听事件中添加了自己的digest循环事件(核心)
浏览器一直在监听页面上的事件,当你点击一个按钮等等,操作触发之后,回调函数就会执行,然后你就可以做任何DOM操作,等回调+函数执行完成,浏览器就会相应更新DOM。 angular往里面加了监听事件。

2.watch队列

每次你绑定一些东西到你的UI界面上时你就会往watch队列里插入一条watch。watch就是那个可以检测它监视的model里时候有变化的东西。当我们的模版加载完毕时,Angular解释器会寻找每个directive(指令),然后生成每个需要的watch。

3.digest循环
当浏览器接收到可以被angular context处理的事件时,digest循环就会触发,这个循环包括了两个更小的循环组合起来的,一个是处理evalAsync队列,另一个是watch队列,其实就是digest会遍历我们的watch,然后问它有没有属性和值发生变化了,直到所有的watch队列全部都检查过,一旦有watch改变了,那就要循环从新触发,直到所有的watch都没有变化,这样才能保证所有的model都已经不会再变化了,但是如果循环超过10次的话,那么它将抛出一个异常,这是为了防止无限循环,当digest循环结束

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值