当前位置:首页 > VUE

vue双向绑定实现方式

2026-02-20 17:56:06VUE

Vue 双向绑定的实现方式

Vue 的双向绑定主要通过 v-model 指令实现,其核心原理是结合数据劫持(Object.definePropertyProxy)和发布-订阅模式。以下是具体实现方式:

使用 v-model 指令

v-model 是语法糖,默认绑定 value 属性并监听 input 事件。例如在输入框中:

<input v-model="message">

等价于:

<input :value="message" @input="message = $event.target.value">

数据劫持

Vue 2.x 使用 Object.defineProperty 劫持数据属性的 gettersetter,实现数据变动时触发更新:

Object.defineProperty(obj, key, {
  get() { return val; },
  set(newVal) {
    val = newVal;
    dep.notify(); // 通知依赖更新
  }
});

Vue 3.x 改用 Proxy 代理整个对象,支持深层监听和数组变动:

vue双向绑定实现方式

const proxy = new Proxy(obj, {
  get(target, key) { return Reflect.get(target, key); },
  set(target, key, value) {
    Reflect.set(target, key, value);
    triggerUpdate(); // 触发更新
    return true;
  }
});

发布-订阅模式

每个响应式属性关联一个 Dep(依赖收集器),在 getter 中收集依赖(Watcher),在 setter 中通知依赖更新:

class Dep {
  constructor() { this.subs = []; }
  addSub(sub) { this.subs.push(sub); }
  notify() { this.subs.forEach(sub => sub.update()); }
}

自定义组件实现双向绑定

在自定义组件中,v-model 默认绑定 modelValue 并触发 update:modelValue 事件:

<CustomComponent v-model="message" />

组件内部需显式处理:

vue双向绑定实现方式

props: ['modelValue'],
emits: ['update:modelValue'],
template: `
  <input 
    :value="modelValue" 
    @input="$emit('update:modelValue', $event.target.value)"
  >
`

多值双向绑定

Vue 3.x 支持多个 v-model 绑定,如:

<UserName
  v-model:first-name="firstName"
  v-model:last-name="lastName"
/>

组件内部对应 firstNameupdate:firstName 事件。

修饰符

v-model 支持修饰符,例如:

  • .lazy:将 input 事件改为 change 事件。
  • .number:自动将输入转为数字。
  • .trim:自动去除首尾空格。

通过以上机制,Vue 实现了高效的双向数据绑定,简化了表单和组件间的数据同步。

标签: 绑定双向
分享给朋友:

相关文章

vue双向数据实现

vue双向数据实现

Vue 双向数据绑定的实现原理 Vue 的双向数据绑定主要通过 v-model 指令实现,其核心是基于数据劫持和发布-订阅模式。 数据劫持(响应式原理) Vue 使用 Object.definePr…

.vue 双向绑定实现原理

.vue 双向绑定实现原理

Vue 双向绑定实现原理 Vue 的双向绑定核心是通过数据劫持结合发布-订阅模式实现的,主要依赖以下技术: 数据劫持(Object.defineProperty 或 Proxy) Vue 2.x 使…

vue怎么实现input绑定

vue怎么实现input绑定

实现 Vue 中 input 绑定的方法 使用 v-model 指令实现双向绑定 v-model 是 Vue 提供的语法糖,用于实现表单元素与数据的双向绑定。它会根据输入框类型自动选取正确的方式更新数…

vue绑定图片实现默认

vue绑定图片实现默认

vue绑定图片实现默认的方法 在Vue中绑定图片并设置默认图片,可以通过多种方式实现。以下是几种常见的方法: 使用v-bind绑定图片路径 在模板中使用v-bind指令绑定图片路径,同时设置默认图…

怎么实现数据绑定vue

怎么实现数据绑定vue

数据绑定的基本概念 在Vue中,数据绑定是一种将数据模型与DOM元素动态关联的机制,确保数据变化时视图自动更新。Vue通过响应式系统实现这一功能。 双向数据绑定(v-model) 使用v-mod…

vue双向绑定实现案例

vue双向绑定实现案例

Vue 双向绑定实现案例 Vue 的双向绑定通过 v-model 指令实现,结合了数据绑定和事件监听。以下是几种常见场景的实现案例: 基础输入框绑定 <template> &…