vue 双向绑定
数据劫持加 发布者 - 订阅者模式 实现的。
其中主要包含 发布者(Observer 数据监听器)、订阅者 (watcher)、Compile解析器
目的是为了实现数据改变视图、视图交互改变数据。
原理流程:
compile : 每一个 数据模板(双括号{{}}标签、v-on、v-model)生成一个watcher,watcher绑定更新函数。
watcher绑定的更新函数的功能1是在当前模板数据改变时更新视图(双括号)。当Observer 监听到数据变化(Object.defineProperty),则通知数据对应的watcher,watcher执行绑定函数更新视图,这里就实现了数据改变视图的功能。
:watcher绑定的更新函数的功能2是当前数据模板的元素属性更改时(比如input事件改变了文本框的值属性、change事件改变了单选框的值等)执行对应数据的更改,这里就实现了视图改变数据。
数据更改后又进入场景1通知相关连的watcher。
watcher有可能是相关联的,比如数据A的模板 是 computed的A属性生成了watcher A , 数据B的模板是data B, A依赖B,则B改变时会通知到B的watcher 和A的watcher