使用vue开发输入型组件更好的一种解决方式(子组件向父组件传值,基于2.2.0)

本文介绍了在Vue.js开发中,如何更优雅地处理子组件向父组件传递输入值的问题。传统方式是通过watch监听并使用$emit,但在Vue 2.2.0及以上版本,可以利用v-model实现双向数据绑定,简化了代码,提高了效率。这种方法尤其在处理多个子组件时能显著减少重复的事件监听和处理逻辑。
摘要由CSDN通过智能技术生成

之前使用vue开发组件的时候,在遇到子组件向父组件传递值时我采用的方法是这样的:
比如子组件是一个输入框,父组件调用时需要获取到子组件输入的值,子组件通过watch监听输入框的值然后通过this.$emit给父组件,再在父组件v-on绑定相应方法获取到从子组件传入的值,再将传入的值给对应的data:

childInput.vue:
<template>
   <input type="text" v-model="inputValue">
</template>
<script>
  export default{
     data() {
        return{inputValue: null}
     },
     watch:{
        inputValue(val){
           this.$emit('getValue', val)
        }
     }
  }
</script>


parent.vue:
<template>
   <div>
      <child-input
      v-on:getValue="(val)=>{someValue = val}"/>
   </div>
</template>
<script>
   export default{
      data(){
         someValue: null
      }
   }
</script>

这样的解决方式感觉有点蠢,因为这样写每次我调用子组件的时候都会需要写一个v-on:getValue然后将相应的值赋给对应的data数据,比如在写嵌套组件的时候,一般一个Input组件包含多个input类型,然后在form表单调用的时候可能会调用10个以上的input子组件,就意味着需要些10多个的v-on:xxx=”(val)=>{yyy = val}”。

然而今天在浏览官网时发现了另外一个解决方法:

相对于上述的老办法倒是方便了许多,不过这种方法只有在vue 2.2.0以上才可以使用(根据官网的说法):

parent.vue:
<template>
   <div>
      <child-input
      v-model="someValue"/>
   </div>
</template>
<script>
   export default{
      data(){
         someValue: null
      }
   }
</script>


childInput.vue:
<template>
    <span>
      <input
        ref="input"
        v-bind:value="value"
        v-on:input="updateValue($event.target.value)"
      >
    </span>
</template>
<script>
    export default{
       data() {
         return {
           inputValue: null,//输入框的值
         }
       },
       methods: {
           updateValue(val) {
              this.$emit('input', val)
           }
       }
    }
</script>

这样写每次调用子组件只用像一般的元素写v-model双向绑定数据即可。

创作不易,觉得不错记得点下赞哟~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值