当前位置:首页 > VUE

vue双向实现数据

2026-03-28 12:02:53VUE

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

Vue 的双向数据绑定主要通过 v-model 指令实现,它结合了属性绑定(v-bind)和事件监听(v-on),适用于表单元素如 inputselecttextarea。以下是几种常见的实现方式:

使用 v-model 指令

v-model 是 Vue 提供的语法糖,简化了表单元素的双向绑定。它会根据不同的输入元素自动选择合适的方式更新数据。

vue双向实现数据

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

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

手动实现双向绑定

如果不使用 v-model,可以通过 v-bind 绑定值和 v-on 监听事件手动实现双向绑定。

<template>
  <input 
    :value="message" 
    @input="message = $event.target.value" 
    placeholder="请输入内容"
  >
  <p>输入的内容是:{{ message }}</p>
</template>

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

自定义组件中的双向绑定

在自定义组件中实现双向绑定,需要使用 model 选项和 $emit 触发事件。

vue双向实现数据

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

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

使用 .sync 修饰符

.sync 修饰符是另一种实现父子组件双向绑定的方式,通过 update:propName 事件更新父组件数据。

<template>
  <CustomInput :value.sync="message" />
  <p>输入的内容是:{{ message }}</p>
</template>

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

双向绑定的底层原理

Vue 的双向绑定基于数据劫持和发布-订阅模式:

  • 使用 Object.definePropertyProxy 劫持数据的 gettersetter
  • 在数据变化时通知依赖的视图更新(通过 DepWatcher 机制)。
  • 监听表单元素的输入事件(如 inputchange)来更新数据。

注意事项

  • v-model 默认绑定的是 value 属性和 input 事件,但可以通过 model 选项修改。
  • 对于复选框和单选按钮,v-model 会绑定到 checked 属性和 change 事件。
  • 在 Vue 3 中,v-model 的行为略有调整,支持多个 v-model 绑定。

标签: 双向数据
分享给朋友:

相关文章

vue实现双向

vue实现双向

Vue 实现双向绑定的方法 Vue 的双向绑定主要通过 v-model 指令实现,它结合了数据绑定和事件监听,适用于表单元素(如 input、select、textarea 等)。以下是几种常见的实现…

uniapp 数据

uniapp 数据

uniapp 数据管理方法 本地存储 使用 uni.setStorageSync 和 uni.getStorageSync 进行本地数据持久化存储。适合保存用户偏好设置或小型数据。 // 存储数…

react如何设置数据

react如何设置数据

设置数据的常见方法 在React中设置数据通常涉及组件的状态管理,可以通过以下几种方式实现: 使用useState Hook(函数组件) import React, { useState } fr…

vue实现数据排序

vue实现数据排序

Vue 实现数据排序的方法 在 Vue 中实现数据排序可以通过多种方式完成,以下是几种常见的方法: 使用计算属性排序 计算属性可以根据响应式数据动态计算并返回排序后的数组。例如,对一个数组按升序排序…

vue实现数据分页

vue实现数据分页

Vue 实现数据分页的方法 使用计算属性分页 在 Vue 中,可以利用计算属性对数据进行分页处理。这种方法适用于前端分页,即一次性获取所有数据后在客户端进行分页。 data() { return…

vue怎么实现双向

vue怎么实现双向

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