当前位置:首页 > 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 通过 v-bind 指令实现单向数据绑定(数据从模型到视图),语法为 v-bind:属性="数据" 或简写为 :属性="数据"。例如绑定 src 属性: <img :…

vue简单实现双向绑定

vue简单实现双向绑定

Vue 双向绑定的简单实现 Vue 的双向绑定核心是通过 v-model 指令实现的,它结合了 v-bind 和 v-on 的功能。以下是一个简单的实现方式: 模板部分 <template&…

vue中实现双向数据

vue中实现双向数据

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

vue怎么实现数据绑定

vue怎么实现数据绑定

Vue 数据绑定的实现方式 Vue 的数据绑定主要通过指令和响应式系统实现,以下是核心方法: 双向数据绑定(v-model) v-model 指令用于表单元素与数据的双向绑定: <input…

react如何绑定数据

react如何绑定数据

React 数据绑定的方法 React 中的数据绑定通常通过状态(state)和属性(props)来实现,以下是几种常见的绑定方式: 单向数据绑定(State to UI) React 默认采用单向…