当前位置:首页 > 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 实现:

vue双向绑定实现例子

<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 时更新视图。

    vue双向绑定实现例子

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

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

手动实现简化版

// 数据监听
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 的双向绑定是通过数据劫持结合发布者-订阅者模式实现的,核心是 Object.defineProperty(Vue 2.x)或 Proxy(Vue 3.x)。以下是具…

php实现双向队列

php实现双向队列

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

Vue数据绑定实现

Vue数据绑定实现

Vue 数据绑定的核心机制 Vue 的数据绑定基于响应式系统,通过 Object.defineProperty 或 Proxy 实现。当数据变化时,视图自动更新。 双向绑定的实现方式 v-model…

vue 双向实现原理

vue 双向实现原理

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

vue 实现双向绑定

vue 实现双向绑定

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

vue实现绑定页面

vue实现绑定页面

Vue 实现数据绑定到页面的方法 Vue.js 通过数据绑定机制实现数据和页面的同步更新,主要依赖响应式系统和模板语法。以下是几种常见的绑定方式: 双向绑定 (v-model) 使用 v-model…