返回

自定组件轻松用v-model

前端

在上一篇文章中,我们深入探讨了 v-model 在表单用法中的应用,今天我们将把目光聚焦于它在自定义组件中的用法。

v-model 在自定义组件中的用法与在表单中的用法类似,它接收一个属性 modelValue 并触发一个事件 update:modelValue 来更新该值。

但要注意的是,由于组件是一个独立的、可重复使用的单元,因此它不应该直接修改父组件的状态。取而代之,它应该通过事件来通知父组件状态的变化。

为了演示自定义组件中 v-model 的用法,我们来构建一个简单的计数器组件。

  1. 定义一个名为 Counter.vue 的组件文件:
<template>
  <div>
    <button @click="count++">+</button>
    <span>{{ count }}</span>
    <button @click="count--">-</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      count: 0
    }
  }
}
</script>
  1. 在父组件中使用 Counter 组件:
<template>
  <div>
    <counter v-model="count"></counter>
  </div>
</template>

<script>
import Counter from './Counter.vue'

export default {
  components: {
    Counter
  },
  data() {
    return {
      count: 0
    }
  }
}
</script>

当我们在子组件中点击按钮时,count 的值将发生变化,同时父组件中绑定的 count 值也会随之更新。

vue2和vue3中v-model的使用有一些不同。在vue2中,v-model需要使用.sync修饰符,而在vue3中则不需要。

在自定义组件中使用 v-model 时,需要注意以下几点:

  1. 子组件不应直接修改父组件的状态,而应通过事件来通知父组件状态的变化。
  2. 子组件的 modelValue 属性是只读的,不能直接修改。
  3. 子组件的 update:modelValue 事件必须是一个函数,并且只能接收一个参数。

常见错误和注意事项

  1. 避免在子组件中直接修改父组件的状态。
  2. 确保子组件的 modelValue 属性是只读的。
  3. 确保子组件的 update:modelValue 事件是一个函数,并且只能接收一个参数。
  4. 在使用 v-model 时,要注意父组件和子组件之间的通信。