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