在写某个项目遇到的表单提交验证时,打算偷懒一次性验证几个字段,结果遇到,v-model绑定input,data未及时更新的小坑
源代码:
<input v-model="info.expressName"/>
<input v-model="info.expressNo"/>
<script>
export default {
data() {
info: {
expressName: '',
expressNo: ''
}
},
methods: {
}
computed: {
isCanSub: function() {
return this.info.expressName || this.info.expressNo
}
}
}
</script>
测试发现,computed并没有监听到任意一个input的v-model值的变化
怎么写怎么不通过,网上搜索一番,有的说在computed里$set()重新渲染,有的说用watch,有的说用value不用model,基本都没用,不方便的不方便,不好使的不好使。思来想去,既然没更新,那我直接vue.$set() 强制更新一波不就完了。
测试通过完美解决问题
<input :value="info.expressName" @input="checkValue($event, 'expressName')"/>
<input :value="info.expressNo" @input="checkValue($event, 'expressNo')"/>
<script>
export default {
data() {
info: {
expressName: '',
expressNo: ''
}
},
methods: {
checkValue(e, type){
let val = e.detail.value
this.$set(this.info, type, val)
return val
}
}
computed: {
isCanSub: function() {
return this.info.expressName || this.info.expressNo
}
}
}
</script>