当前位置:首页 > VUE

怎么实现vue双向绑定

2026-01-20 11:59:23VUE

Vue 双向绑定的实现原理

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

使用 v-model 实现表单双向绑定

v-model 是语法糖,默认绑定 value 属性并监听 input 事件。以下是一个基础示例:

怎么实现vue双向绑定

<template>
  <input v-model="message" placeholder="输入内容">
  <p>当前输入:{{ message }}</p>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    };
  }
};
</script>

自定义组件的双向绑定

若需在自定义组件中实现双向绑定,需手动定义 model 选项并触发更新事件:

<template>
  <CustomInput v-model="text" />
</template>

<script>
export default {
  data() {
    return { text: '' };
  }
};
</script>

自定义组件 CustomInput.vue

怎么实现vue双向绑定

<template>
  <input 
    :value="value" 
    @input="$emit('input', $event.target.value)"
  >
</template>

<script>
export default {
  props: ['value']
};
</script>

底层原理:数据劫持与监听

Vue 2.x 使用 Object.defineProperty 劫持数据,Vue 3.x 改用 Proxy。以下是简化版的响应式实现:

// Vue 2.x 风格的数据劫持
function defineReactive(obj, key) {
  let value = obj[key];
  const dep = new Dep(); // 依赖收集器

  Object.defineProperty(obj, key, {
    get() {
      dep.depend(); // 收集依赖
      return value;
    },
    set(newVal) {
      if (newVal !== value) {
        value = newVal;
        dep.notify(); // 通知更新
      }
    }
  });
}

手动实现简易双向绑定

以下是一个非框架的原生 JavaScript 实现示例:

<input id="input" />
<p id="display"></p>

<script>
  const input = document.getElementById('input');
  const display = document.getElementById('display');
  let data = { value: '' };

  Object.defineProperty(data, 'value', {
    get() { return this._value; },
    set(newVal) {
      this._value = newVal;
      display.textContent = newVal; // 更新视图
    }
  });

  input.addEventListener('input', (e) => {
    data.value = e.target.value; // 数据变更触发 setter
  });
</script>

注意事项

  • 修饰符v-model 支持 .lazy(转为 change 事件)、.number(转为数字)、.trim(去除首尾空格)。
  • 多选框/单选组:需绑定数组或布尔值,例如:
    <input type="checkbox" v-model="checked" />
  • 组件深度绑定:Vue 3 中可使用 v-model:propName 指定绑定属性。

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

相关文章

vue实现双向

vue实现双向

Vue 实现双向绑定的方法 Vue 主要通过 v-model 指令实现双向绑定,适用于表单元素或自定义组件。以下是几种常见实现方式: 表单元素的双向绑定 在表单元素(如 input、textarea…

vue双向实现原理

vue双向实现原理

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

vue中实现双向数据

vue中实现双向数据

Vue 中实现双向数据绑定的方法 使用 v-model 指令 v-model 是 Vue 提供的语法糖,用于在表单元素上实现双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素的值。 <…

vue自己实现双向绑定

vue自己实现双向绑定

实现 Vue 双向绑定的核心原理 双向绑定的核心是通过数据劫持结合发布-订阅模式实现的。主要涉及 Object.defineProperty 或 Proxy 来监听数据变化,并通过观察者模式通知视图更…

vue绑定图片实现默认

vue绑定图片实现默认

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

实现Vue双向数据绑定

实现Vue双向数据绑定

Vue 双向数据绑定的实现原理 Vue 的双向数据绑定是通过 v-model 指令实现的,其核心基于 数据劫持 和 发布-订阅模式。具体实现分为以下几个部分: 数据劫持(Object.defineP…