当前位置:首页 > VUE

vue 实现双向绑定

2026-01-19 05:33:41VUE

Vue 双向绑定的实现原理

Vue 的双向绑定主要通过 v-model 指令实现,底层基于数据劫持和发布-订阅模式。以下是核心实现机制:

数据劫持(响应式系统) Vue 使用 Object.defineProperty(Vue 2)或 Proxy(Vue 3)劫持数据对象的属性访问。当数据变化时,触发 setter 通知依赖更新。

vue 实现双向绑定

// Vue 2 响应式简化实现
function defineReactive(obj, key, val) {
  Object.defineProperty(obj, key, {
    get() {
      return val;
    },
    set(newVal) {
      if (newVal === val) return;
      val = newVal;
      dep.notify(); // 通知所有订阅者更新
    }
  });
}

依赖收集(发布-订阅) 每个响应式属性拥有一个 Dep 实例,用于收集依赖(Watcher)。当属性被访问时,当前 Watcher 会被添加到 Dep 中。

class Dep {
  constructor() {
    this.subs = [];
  }
  addSub(sub) {
    this.subs.push(sub);
  }
  notify() {
    this.subs.forEach(sub => sub.update());
  }
}

实现双向绑定的方法

使用 v-model 指令 v-model 是语法糖,自动处理输入事件和值绑定:

vue 实现双向绑定

<input v-model="message">
<!-- 等价于 -->
<input 
  :value="message"
  @input="message = $event.target.value"
>

自定义组件实现双向绑定 在自定义组件中,需显式定义 value prop 和 input 事件:

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

<!-- 组件内部实现 -->
<script>
export default {
  props: ['value'],
  methods: {
    updateValue(newVal) {
      this.$emit('input', newVal);
    }
  }
}
</script>

手动实现数据绑定 通过事件监听和状态更新模拟双向绑定:

<input 
  :value="text" 
  @input="text = $event.target.value"
>
<script>
export default {
  data() {
    return { text: '' }
  }
}
</script>

注意事项

  • Vue 3 使用 Proxy 替代 Object.defineProperty,支持深层对象监听和数组变化检测。
  • 对于复杂对象,需确保属性初始化时已被 Vue 劫持,或使用 Vue.set/this.$set 动态添加响应式属性。
  • v-model 在组件上默认使用 modelValue prop 和 update:modelValue 事件(Vue 3)。

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

相关文章

vue实现事件绑定的是

vue实现事件绑定的是

Vue 事件绑定实现方式 Vue 通过 v-on 指令实现事件绑定,语法为 v-on:事件名="处理方法" 或简写为 @事件名="处理方法"。以下是具体实现方法和示例: 基础事件绑定 <…

vue实现数组绑定

vue实现数组绑定

Vue 数组绑定的实现方法 Vue 提供了多种方式实现数组的响应式绑定,确保数据变化时视图自动更新。以下是常见的实现方法: 使用 v-for 指令渲染数组 通过 v-for 指令可以遍历数组并渲染…

vue怎么实现双向

vue怎么实现双向

Vue 双向绑定的实现方式 Vue 中实现双向绑定的核心机制是 v-model 指令,它结合了属性绑定和事件监听,适用于表单元素或自定义组件。 表单元素的双向绑定 在原生表单元素(如 input、s…

实现vue数据绑定

实现vue数据绑定

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

vue双向绑定实现方式

vue双向绑定实现方式

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

vue双向数据绑定实现

vue双向数据绑定实现

双向数据绑定的概念 双向数据绑定是指视图(View)与模型(Model)之间的双向同步。当数据发生变化时,视图自动更新;当用户操作视图时,数据也会自动更新。Vue 通过 v-model 指令实现双向数…