vue的双向数据绑定原理

vue的双向数据绑定原理

vue.js采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()(MDN中方法介绍)
来劫持属性的set方法和get方法,然后在数据变动时发布消息给订阅者,并触发相应节点的监听回调函数。
1.实现数据监听器Observer,能够对数据对象的所有属性进行监听,一旦发生变化可获取最新值,通知订阅者
2.实现解析模板指令Compile,对每个元素节点进行解析,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听的订阅者,一旦数据出现变化就会收到通知,更新视图。
3.Watcher是连接Observer和Compile之间的纽带,能够订阅并收到每个节点数据变动的通知来更新视图。主要做的事情是:
(1)在自身实例化时往属性订阅器(dep)里面添加自己
(2)自身必须有update()方法
(3)当属性变动dep.notice通知时,调用自身的update()方法,并且触发Compile中绑定的回调
(4)MVVM作为入口函数,整合上述三者,通过Observer监听自己的model数据变化,通过Compile来解析编译模板指令,最终利用Watcher搭起通信桥梁,以此达到数据变化=》视图更新;视图交互变化=》model数据变更的双向绑定效果。

对于MVVM的理解:M模型用来定义驱动数据,V经过改变数据后的HTML,VM为框架视图用来实现双向绑定。
vue的双向数据绑定原理

数据驱动:
vue的双向数据绑定原理