Vue的双向绑定数据的原理

vue.js 则是采⽤数据劫持结合发布者-订阅者模式的⽅式,通过 Object.defineProperty() 来劫持各个属性的 setter , getter ,在数据变动时发布消息给订阅者,触发相应的监听回调。

Vue的双向绑定数据的原理是基于 数据劫持和发布者-订阅者模式 的组合。

具体步骤如下:

1. Vue通过 Object.defineProperty() ⽅法对数据对象进⾏劫持。

2. 在劫持过程中,为每个属性添加了 getter 和 setter 。

3. 当访问属性时,会触发 getter 函数,⽽当属性值发⽣变化时,会触发 setter 函数。

4. 在 setter 函数中,Vue会通知相关的订阅者,即依赖于该属性的视图或其他数据。

5. 订阅者收到通知后,会执⾏相应的更新操作,将新的数据反映到视图上。

这样,当数据发⽣变化时,Vue能够⾃动更新相关的视图,实现了双向绑定的效果。

这种原理结合了数据劫持和发布者-订阅者模式的特点,实现了数据与视图之间的⾃动同步。通过数据劫持,Vue能够捕获数据的变化,⽽发布者-订阅者模式则确保了数据变化时的及时通知和更新

// 定义⼀个数据对象
const data = {
 message: 'Hello Vue!',
};
// 通过Object.defineProperty()劫持数据对象
Object.defineProperty(data, 'message', {
 get() {
 console.log('访问数据');
 return this._message;
 },
 set(newValue) {
 console.log('更新数据');
 this._message = newValue;
 // 通知订阅者,执⾏更新操作
 notifySubscribers();
 },
});
// 定义⼀个订阅者列表
const subscribers = [];
// 订阅者订阅数据
function subscribe(callback) {
229
 subscribers.push(callback);
}
// 通知订阅者,执⾏更新操作
function notifySubscribers() {
 subscribers.forEach((callback) => {
 callback();
 });
}
// 订阅者更新视图
function updateView() {
 console.log('视图更新:', data.message);
}
// 订阅数据变化
subscribe(updateView);
// 修改数据,触发更新
data.message = 'Hello VueJS!';

在上述示例中,我们通过 Object.defineProperty() 对 data 对象的 message 属性进⾏劫持,并在 getter 和 setter 中添加了相应的⽇志和更新操作。订阅者通过 subscribe ⽅法订阅数据变化,并在 updateView ⽅法中更新视图。当我们修改 data.message的值时,会触发 setter 函数,从⽽通知订阅者执⾏更新操作,最终更新了视图。

通过这种⽅式,Vue实现了双向绑定的效果,使得数据的变化能够⾃动反映到视图上。

相关推荐

  1. Vue双向数据原理

    2024-02-17 13:06:01       45 阅读
  2. Vue双向数据原理

    2024-02-17 13:06:01       31 阅读
  3. vue2 双向数据实现及原理

    2024-02-17 13:06:01       12 阅读
  4. vue双向原理

    2024-02-17 13:06:01       30 阅读
  5. Vue2 和Vue3 双向数据区别和原理

    2024-02-17 13:06:01       20 阅读
  6. 【八股系列】vue双向原理是什么?

    2024-02-17 13:06:01       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-17 13:06:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-17 13:06:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-17 13:06:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-17 13:06:01       20 阅读

热门阅读

  1. 【Linux】指令 【scp】

    2024-02-17 13:06:01       26 阅读
  2. Matplotlib plt.plot数据可视化应用案例

    2024-02-17 13:06:01       30 阅读
  3. nlp中如何数据增强

    2024-02-17 13:06:01       30 阅读
  4. Windows安装minio

    2024-02-17 13:06:01       42 阅读
  5. 【笔记】常用方法

    2024-02-17 13:06:01       30 阅读
  6. Linux组管理和权限管理

    2024-02-17 13:06:01       24 阅读
  7. RPA基础知识学习清单

    2024-02-17 13:06:01       26 阅读
  8. Python中tqdm模块的常用方法和示例

    2024-02-17 13:06:01       39 阅读
  9. docker 编译安装redis脚本

    2024-02-17 13:06:01       22 阅读