vue自定义组件实现v-model

vue版本:vue2
开发时有时候我们会遇到这种场景,父子组件之间的数据传递,一般都是通过在子组件定义prop向子组件传递数据,但是有时候子组件也会更改传递下来的属性,但是这在vue中是不被允许的。所以我们可以通过定义v-model实现父子组件的数据相互传递和修改。

子组件代码

<template>
  <div>
    输入内容后,将会同时修改父组件传递的值
    <input :value="value" @input="handleInput"></input>
  </div>
</template>
<script>
export default {
  model: {
    prop: 'value',
    event: 'input'
  },
  props: {
    value: ''
  },
  data() {
    return {}
  },
  methods: {
    handleInput(e) {
      this.$emit("input", e.target.value)
    }
  }
}
</script>
<style scoped lang="scss">

</style>

注意:

  1. 如果子组件的属性名为value,那么model中的prop可以省略;同时如果$emit事件为input,那么model中的event也可以省略。当前代码中,其实可以把model给省略掉
  2. 子组件的props属性和model的prop值要保持一致,同时$emit事件和model的event值保持一致。根据这个原则,你可以自定义属性和事件名

此处有个问题,有的人在子组件使用如下代码

<input type="text" v-model="value" />

不出现错误吗?反正我使用后出现了错误
在这里插入图片描述
暂时不管,反正我能跑就好

父组件代码

    <child v-model="formData"></child>
  data(){
    return {
      formData:'你好',
    }
  },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值