当前位置:首页 > VUE

怎么实现vue双向绑定

2026-01-20 11:59:23VUE

Vue 双向绑定的实现原理

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

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

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

<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

<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实现绑定herf

vue实现绑定herf

Vue 中实现绑定 href 的方法 在 Vue 中绑定 href 属性可以通过多种方式实现,以下是几种常见的方法: 使用 v-bind 或简写 : 通过 v-bind 或简写 : 动态绑定 hre…

vue 数据绑定实现

vue 数据绑定实现

Vue 数据绑定的实现方式 Vue 的数据绑定主要通过响应式系统和模板语法实现,以下是核心方法: 双向数据绑定(v-model) 通过 v-model 指令实现表单元素与数据的双向绑定,自动同步数据…

怎么用vue.js实现双向绑定

怎么用vue.js实现双向绑定

使用 v-model 指令实现双向绑定 Vue.js 提供了 v-model 指令用于在表单输入元素(如 input、textarea、select)上实现双向数据绑定。v-model 会根据控件类型…

vue双向实现

vue双向实现

Vue 双向绑定的实现原理 Vue 的双向绑定主要通过 v-model 指令实现,底层结合了数据劫持(Object.defineProperty 或 Proxy)和发布-订阅模式。以下是核心实现机制:…

vue实现绑定输入参数

vue实现绑定输入参数

Vue 实现绑定输入参数 在 Vue 中,可以通过 v-model 指令实现输入框与数据的双向绑定。以下是一个简单的示例: <template> <div> &…

vue实现双向绑定的是

vue实现双向绑定的是

Vue 双向绑定实现原理 Vue 实现双向绑定的核心机制是数据劫持结合发布-订阅模式,主要通过 v-model 指令实现。以下是关键实现细节: 数据劫持(响应式系统) Vue 2.x 使用 Obje…