问题描述InputNumber组件v-model绑定值在输入框中手动删除,在on-change事件中判断获取到的值。如果为null,则赋值为1,但是值变了,但是InputNumber不显示绑定值(或者有时显示,有时不显示)getNum(num){if(typeofnum==='number'){this.$emit('getData',this.judgelabel,this.judge,this.judgeNum,null)}else{this.$Message.info('这??里有默认值~可以自己修改o(* ̄▽ ̄*)プ')this.judgeNum=1//修改不生效this.$emit('getData',this.judgelabel,this.judge,this.judgeNum,null)}},问题分析表明那on-change事件是在值改变的时候触发的,而不是在输入框失焦后触发,那么我们可以认为on-change事件是在删除的瞬间触发的,值变为null。此时赋值为1,赋值操作在很短的时间内连续进行。它可能会导致错误,因为这个值可能会在组件中执行一系列动作,一个没有结束,另一个又来了。所以最好不要在值变化事件中改变它。问题解决setTimeout(()=>{this.judgeNum=1},5000)解决方法一:可以做一个定时器,延迟第二次变化,0.5s比较合适。但其实也可能会受到浏览器响应速度的影响,于是就有了解决方案2//注意这里的on-blur没有默认参数,所以使用this.judgeNum获取用户输入的值方案2:不监听on-change事件,改成监听on-blur失焦事件,之前的问题确实解决了,但是又会出现新的问题,就是当value被改变的时候按下上下键,不监听值的变化,因为没有触发失焦事件,这里也可以用watch来监听,不过有更好的方案3Model传值给subcomponents-->//subcomponent:props:{value:{//注意value不写默认returndefault,但是type类型还是需要写type:Number}},computed:{judgeNum:{get(){returnthis.value},set(val){//只要值改变,就会触发设置事件this.$emit('input',val)//默认输入事件this.$emit('getData',this.judgelabel,this.judge,this.judgeNum,null)}}},methods:{getNum(){//这里不需要抛出新值,都在set里面抛出if(typeofthis.judgeNum==='number'){//this.$emit('getData',this.judgelabel,this.judge,this.judgeNum,null)}else{this.$Message.info('这??里有默认值~可以自己修改o(* ̄▽ ̄*)bu')this.judgeNum=1//this.$emit('getData',this.judgelabel,this.judge,this.judgeNum,null)}}}方案三:对于这种需要父组件改变子组件的v-model值,但是子组件的值变化后还需要同步到父组件,可以直接使用父子组件的双向绑定,通过父组件中的v-model绑定值,使用值在子组件中接收,然后使用计算属性监听它的变化,然后通过change传递input事件(value和input是默认组件v-model实现的语法糖),这样就实现了两者父子组件的方式数据绑定(强关联),因为父组件通过prop传入的值在c中是不允许的隐藏组件已更改