v-model 如何在普通组件上使用

265 阅读1分钟

前言

v-model 一般直接在原生表单组件上使用,但是假如我们想在普通组件上使用呢。

<Rate v-model="value"></Rate>

页面中

export default {
 name: 'App',
 components: {
   Rate,
 },
 data() {
   return {
     value: '',
   }
 }
}

实现思路

关键点:

  • this.props.value 接受父组件的值
  • $emit('input', value)

Rate组件的实现

<template>
  <div class="rate">
    <button v-for="(item,index) in arr" :key="index" @click="$emit('input',item)">
      {{ item }}
    </button>
    <p>{{ value }}</p>
  </div>
</template>

<script>
export default {
  name: "Rate",
  data() {
    return {
      arr: [1, 2, 3]
    }
  },
  props: {
    value: {
      type: Number,
      default: 0,
    }
  }
}
</script>

效果: