当前位置:首页 > VUE

vue实现双向绑定

2026-01-11 21:10:43VUE

Vue 双向绑定的实现原理

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

使用 v-model 实现表单元素双向绑定

在表单元素(如 inputtextareaselect)上使用 v-model,可以自动将输入的值与 Vue 实例的数据属性绑定:

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

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

自定义组件的双向绑定

在自定义组件中实现双向绑定,需要显式定义 model 选项并触发 input 事件:

<template>
  <CustomInput v-model="message" />
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  components: {
    CustomInput: {
      props: ['value'],
      template: `
        <input 
          :value="value"
          @input="$emit('input', $event.target.value)"
        >
      `
    }
  }
}
</script>

手动实现双向绑定(不使用 v-model

通过 v-bindv-on 手动实现等效功能:

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

修饰符的使用

v-model 支持修饰符来优化交互:

  • .lazy:将 input 事件改为 change 事件(失焦后更新)
  • .number:自动将输入转为数字类型
  • .trim:自动去除首尾空格
<input v-model.lazy="message">

双向绑定的底层原理

Vue 2.x 使用 Object.defineProperty 实现数据劫持,结合发布-订阅模式:

  1. 数据劫持:递归遍历 data 对象,为每个属性添加 getter/setter。
  2. 依赖收集:在 getter 中收集依赖(Watcher)。
  3. 派发更新:在 setter 中通知所有依赖进行更新。

Vue 3.x 改用 Proxy 实现,支持更全面的数据监听和更好的性能。

vue实现双向绑定

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

相关文章

jquery绑定事件

jquery绑定事件

jQuery 绑定事件的方法 jQuery 提供了多种方式来绑定事件,以下是常见的几种方法: on() 方法 on() 是最推荐的事件绑定方法,支持动态元素和多个事件绑定。 $(selecto…

vue 双向绑定 实现原理

vue 双向绑定 实现原理

Vue 双向绑定的实现原理 Vue 的双向绑定是通过数据劫持结合发布者-订阅者模式实现的,核心是 Object.defineProperty(Vue 2.x)或 Proxy(Vue 3.x)。以下是具…

vue自己实现双向绑定

vue自己实现双向绑定

实现 Vue 双向绑定的核心原理 双向绑定的核心是通过数据劫持结合发布-订阅模式实现的。主要涉及 Object.defineProperty 或 Proxy 来监听数据变化,并通过观察者模式通知视图更…

vue双向绑定的实现

vue双向绑定的实现

Vue 双向绑定的实现原理 Vue 的双向绑定是通过数据劫持结合发布者-订阅者模式实现的,核心是 Object.defineProperty(Vue 2.x)或 Proxy(Vue 3.x)。 数据…

vue动态绑定的实现

vue动态绑定的实现

Vue 动态绑定的实现方法 Vue 的动态绑定主要通过 v-bind 指令或简写 : 实现,用于动态地将数据绑定到 HTML 元素的属性上。以下是几种常见的动态绑定实现方式: 动态绑定属性 <…

vue如何实现数据绑定

vue如何实现数据绑定

Vue 数据绑定的实现方式 Vue 的数据绑定主要通过双向绑定(v-model)和单向绑定({{ }}插值或 v-bind)实现,核心基于响应式系统。以下是具体实现方法: 插值绑定(单向) 使用双大…