当前位置:首页 > 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 提供了多种数据绑定的方式,包括文本插值、属性绑定、事件绑定、双向绑定等。以下是常见的绑定实现方法: 文本插值 使用双大括号 {{ }} 进行文本插值,将数据动态渲染到 DO…

实现vue动态绑定

实现vue动态绑定

动态绑定的基本语法 在Vue中,使用v-bind指令或简写:实现动态绑定,将数据属性与HTML元素的属性关联起来。例如动态绑定class或style: <div v-bind:class="{…

vue实现双向滚动

vue实现双向滚动

实现双向滚动的 Vue 方法 双向滚动通常指两个关联的滚动区域(如表格的头部和内容部分)同步滚动。以下是几种实现方式: 使用事件监听和 scroll 方法 通过监听一个滚动区域的 scrol…

vue 实现双向绑定

vue 实现双向绑定

Vue 双向绑定的实现原理 Vue 的双向绑定主要通过 v-model 指令实现,底层基于数据劫持和发布-订阅模式。以下是核心实现机制: 数据劫持(响应式系统) Vue 使用 Object.defi…

实现vue数据绑定

实现vue数据绑定

Vue数据绑定的实现方式 Vue.js通过数据劫持和发布-订阅模式实现数据绑定,核心是响应式系统。以下是主要实现方法: 双向数据绑定(v-model) <input v-model="mess…

vue如何实现表单绑定

vue如何实现表单绑定

Vue 表单绑定实现方法 Vue 提供了 v-model 指令实现表单元素的双向数据绑定,适用于多种输入类型。 文本输入框绑定 <input type="text" v-model="mess…