当前位置:首页 > VUE

vue双向绑定实现例子

2026-02-24 17:23:28VUE

Vue 双向绑定实现示例

Vue 的双向绑定通过 v-model 指令实现,本质是语法糖,结合了 v-bind(属性绑定)和 v-on(事件监听)。以下是具体实现示例和原理说明。

基础示例

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

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

自定义组件实现双向绑定

在自定义组件中,需通过 model 选项和 $emit 实现:

<template>
  <div>
    <custom-input v-model="customMessage"></custom-input>
    <p>自定义组件输入的值:{{ customMessage }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      customMessage: ''
    };
  },
  components: {
    'custom-input': {
      props: ['value'],
      model: {
        prop: 'value',
        event: 'input'
      },
      template: `
        <input 
          :value="value" 
          @input="$emit('input', $event.target.value)">
      `
    }
  }
};
</script>

双向绑定原理

  1. 数据劫持
    Vue 使用 Object.definePropertyProxy 监听数据变化,触发 setter 时更新视图。

  2. 依赖收集
    通过 Dep 类收集依赖(Watcher),数据变化时通知 Watcher 更新。

  3. 模板编译
    将模板中的 v-model 解析为 value 属性和 input 事件监听。

    vue双向绑定实现例子

手动实现简化版

// 数据监听
function defineReactive(obj, key, val) {
  const dep = new Dep();
  Object.defineProperty(obj, key, {
    get() {
      if (Dep.target) dep.addSub(Dep.target);
      return val;
    },
    set(newVal) {
      if (newVal === val) return;
      val = newVal;
      dep.notify();
    }
  });
}

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

// 观察者
class Watcher {
  constructor(vm, key, cb) {
    Dep.target = this;
    this.cb = cb;
    vm._data[key]; // 触发 getter
    Dep.target = null;
  }
  update() {
    this.cb();
  }
}

注意事项

  • 在 Vue 3 中,双向绑定基于 Proxy 实现,支持更全面的数据监听。
  • 自定义组件中若需复用 v-model,可通过参数传递(如 v-model:title)。

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

相关文章

vue 双向实现原理

vue 双向实现原理

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

vue 实现双向绑定

vue 实现双向绑定

Vue 双向绑定的实现原理 Vue 的双向绑定主要通过 v-model 指令实现,底层基于数据劫持和发布-订阅模式。以下是核心实现机制: 数据劫持(响应式系统) Vue 使用 Object.defi…

vue双向数据绑定实现

vue双向数据绑定实现

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

怎么实现vue双向绑定

怎么实现vue双向绑定

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

vue双向数据实现

vue双向数据实现

Vue 双向数据绑定的实现原理 Vue 的双向数据绑定主要通过 v-model 指令实现,其核心是基于数据劫持和发布-订阅模式。 数据劫持(响应式原理) Vue 使用 Object.definePr…

vue如何实现双向变电

vue如何实现双向变电

Vue 双向绑定实现方法 Vue 中实现双向绑定的核心是通过 v-model 指令,它结合了 v-bind 和 v-on 的功能,简化了表单元素与数据的同步操作。 基础用法 在表单元素上直接使用 v…