🍎 Vue 双向数据绑定
- Vue 中双向绑定数据是什么?
# 双向数据绑定的概念
从单向数据绑定切入。把
Model绑定到View,当用 JavaScript 代码 更新Model时,View会自动更新。
双向数据绑定就是,在单向数据绑定的基础上,用户更新了 View , Model 中的数据也会自动更新。
🌰 例子 / 填写表单:
当用户填写表单时, View 的状态就被更新了,如果此时可以自动更新 Model 的状态,那就相当于把 Model 和 View 做了双向绑定。

# 双向数据绑定的原理
Vue 是双向绑定数据的框架。双向绑定由三个重要部分组成:
- 数据层 /
Model:应用的数据以及业务逻辑; - 视图层 /
View:应用的展示效果,各类 UI 组件; - 业务逻辑层 /
ViewModel:框架封装的核心,负责将数据与视图关联起来;
这个分层的架构方案称为 MVVM。核心功能为 数据的双向绑定。
# 理解 ViewModel
主要职责:
- 数据发生改变后,更新视图
- 视图发生改变后,更新数据
由两个重要的部分组成:
- 监听器 / Observer :对所有数据的属性进行监听;
- 解析器 / Compiler:对每个元素的节点的指令进行扫描和解析,根据指令模版替换数据,以及绑定响应的更新函数。
# 实现双向绑定
以 Vue 为例,看数据双向绑定的流程:
new Vue()执行初始化,对data执行 响应化处理。这个过程发生在Observe中;- 同时对模版执行编译,找到其中动态绑定的数据,从
data中获取并且初始化试图,这个过程发生在Compiler中; - 同时定义一个更新函数和
Watcher,将来对应数据变化时,Watcher会调用更新函数; - 由于
data某个key在一个视图中可能会出现多次,所以每个key都需要一个管家Dep管理多个Watcher; - 将来
data中的数据一旦发生变化,首先找到对应的Dep,通知所有的Watcher执行更新函数。
::: details:::

:::
# Vue 的双向绑定原理
Vue 的双向绑定是通过 数据劫持 结合 发布者 - 订阅者模式 的方式来实现的,利用 Object.defineProperty() 这个方法重新定义了对象获取 属性值 和 设置属性值( getter / setter )。
# 参考
编辑 (opens new window)
📢 上次更新: 2022/09/02, 10:18:16
