如何用白话描述vue双向数据绑定的原理?

用我自己的话来说就是,使用数据劫持加上发布者-订阅者的模式,通过Object.defineProperty()方法来劫持各个属性的setter和getter,Observe将对象数据的所有属性进行递归遍历,并加上setter和getter,这样一来,一旦数据发生改变就会触发setter,就能监听到数据的变化了;Compile对每个元素节点的指令进行扫描和解析,把里面的变量转换成数据,再进行初始化渲染页面,并且把每个指令对应的节点 绑定更新函数,然后添加用来监听数据变化的订阅者;而订阅者Watcher自身实例化时,就在属性订阅器(dep)里面添加自己,等数据发生变化,属性订阅器就是用dep.notice()方法发布通知,同时调用订阅者自身的update()方法,并触发Compile里面绑定的回调进而更新函数。这样一来呢,一个发布者(Observe)负责监听自己数据的变化,一个compile负责编译解析,订阅者(Watcher)就负责将前面二者进行牵线搭桥,形成数据变化、视图立马更新、视图变动、数据也变动的双向绑定的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值