当前位置:首页 > VUE

vue数据实现双向绑定

2026-03-27 05:02:39VUE

Vue 数据双向绑定的实现方法

Vue 通过数据劫持和发布-订阅模式实现双向绑定,核心是 v-model 指令和响应式系统。以下是具体实现方式:

使用 v-model 指令

v-model 是语法糖,默认绑定表单元素的 value 属性并监听 input 事件:

<input v-model="message">
<p>{{ message }}</p>

等价于:

vue数据实现双向绑定

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

自定义组件的双向绑定

在自定义组件中,需显式定义 model 选项并触发更新事件:

Vue.component('custom-input', {
  props: ['value'],
  template: `
    <input 
      :value="value"
      @input="$emit('input', $event.target.value)"
    >
  `
});

使用时:

vue数据实现双向绑定

<custom-input v-model="message"></custom-input>

响应式原理

Vue 2.x 使用 Object.defineProperty 实现数据劫持:

function defineReactive(obj, key, val) {
  Object.defineProperty(obj, key, {
    get() { return val; },
    set(newVal) {
      if (newVal === val) return;
      val = newVal;
      dep.notify(); // 触发更新
    }
  });
}

Vue 3.x 改用 Proxy

const observed = new Proxy(data, {
  get(target, key) {
    track(target, key); // 依赖收集
    return target[key];
  },
  set(target, key, value) {
    target[key] = value;
    trigger(target, key); // 触发更新
    return true;
  }
});

手动实现简单双向绑定

示例代码演示基础原理:

<input id="input">
<span id="text"></span>

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

  Object.defineProperty(data, 'value', {
    set(val) {
      input.value = val;
      text.innerText = val;
    },
    get() { return input.value; }
  });

  input.addEventListener('input', (e) => {
    data.value = e.target.value;
  });
</script>

注意事项

  • 数组和对象需特殊处理,Vue 提供了 Vue.set 和数组变异方法
  • 动态添加的属性默认非响应式,需使用 Vue.set
  • Vue 3 的 Proxy 可原生监听数组变化和动态属性

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

相关文章

vue 绑定实现

vue 绑定实现

Vue 绑定实现 Vue 提供了多种数据绑定的方式,包括文本插值、属性绑定、事件绑定、双向绑定等。以下是常见的绑定实现方法: 文本插值 使用双大括号 {{ }} 进行文本插值,将数据动态渲染到 DO…

vue双向绑定实现简单

vue双向绑定实现简单

Vue 双向绑定的简单实现 双向绑定的核心是通过数据劫持结合发布-订阅模式实现。以下是简化版的实现步骤: 数据劫持(Object.defineProperty) 通过 Object.definePr…

php实现双向队列

php实现双向队列

PHP 实现双向队列的方法 双向队列(Deque,Double-ended Queue)是一种允许在队列两端进行插入和删除操作的数据结构。PHP 中可以通过数组或 SplDoublyLinkedLis…

vue双向绑定实现

vue双向绑定实现

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

vue双向绑定实现方式

vue双向绑定实现方式

Vue 双向绑定的实现方式 Vue 的双向绑定主要通过 v-model 指令实现,结合数据劫持和发布-订阅模式完成数据与视图的同步更新。以下是核心实现原理及方式: 数据劫持(响应式原理) Vue 使…

vue中实现双向数据

vue中实现双向数据

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