当前位置:首页 > VUE

vue数据实现双向绑定

2026-03-06 19:55:06VUE

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

Vue 通过数据劫持和发布-订阅模式实现双向绑定,核心是 v-model 指令和响应式系统。以下是具体实现方法:

使用 v-model 指令

v-model 是 Vue 提供的语法糖,用于在表单元素(如 inputselect)上实现双向绑定。它会根据控件类型自动选取正确的方法更新数据。

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

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

自定义组件的双向绑定

对于自定义组件,可以通过 model 选项和 $emit 事件实现双向绑定。

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

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

自定义组件内部实现:

<template>
  <input 
    :value="value" 
    @input="$emit('input', $event.target.value)"
  >
</template>

<script>
export default {
  props: ['value'],
  model: {
    prop: 'value',
    event: 'input'
  }
}
</script>

手动实现响应式绑定

如果不使用 v-model,可以通过 :value 绑定和 @input 事件手动实现双向绑定。

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

使用 .sync 修饰符(Vue 2.x)

在 Vue 2.x 中,可以通过 .sync 修饰符实现父子组件的双向绑定。

父组件:

<ChildComponent :title.sync="pageTitle" />

子组件通过触发 update:title 事件更新:

this.$emit('update:title', newTitle)

Vue 3 的 v-model 变更

Vue 3 中 v-model 默认使用 modelValue 作为 prop,update:modelValue 作为事件。

父组件:

<CustomComponent v-model="title" />

子组件:

<script setup>
defineProps(['modelValue'])
defineEmits(['update:modelValue'])
</script>

<template>
  <input
    :value="modelValue"
    @input="$emit('update:modelValue', $event.target.value)"
  />
</template>

注意事项

  • v-model 在内部为不同的输入元素使用不同的 property 并抛出不同的事件:

    • text 和 textarea 元素使用 value property 和 input 事件;
    • checkbox 和 radio 使用 checked property 和 change 事件;
    • select 字段将 value 作为 prop 并将 change 作为事件。
  • 在 Vue 3 中,可以为一个组件定义多个 v-model 绑定,例如:

    vue数据实现双向绑定

    <UserForm
      v-model:first-name="firstName"
      v-model:last-name="lastName"
    />

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

相关文章

vue怎么实现绑定

vue怎么实现绑定

数据绑定基础 Vue 通过 v-bind 指令实现单向数据绑定(数据从模型到视图),语法为 v-bind:属性="数据" 或简写为 :属性="数据"。例如绑定 src 属性: <img :…

vue实现数据双向

vue实现数据双向

在Vue中实现数据双向绑定主要依靠v-model指令,它结合了属性绑定和事件监听,适用于表单元素或自定义组件。以下是具体实现方式: 基础表单元素的双向绑定 对于原生表单元素(如input、texta…

vue双向绑定实现方式

vue双向绑定实现方式

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

vue实现数组双向绑定

vue实现数组双向绑定

实现数组双向绑定的方法 在Vue中,实现数组的双向绑定通常需要结合v-model指令或自定义事件处理。以下是几种常见的方法: 使用v-model绑定数组 Vue的v-model指令默认支持表单元素的…

vue 双向绑定 实现原理

vue 双向绑定 实现原理

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

vue怎样实现数组绑定

vue怎样实现数组绑定

Vue 实现数组绑定的方法 Vue 提供了多种方式来实现数组的绑定,以下是常见的几种方法: 使用 v-for 指令绑定数组 通过 v-for 指令可以遍历数组并渲染列表。语法如下: <ul&…