效果:想要实现输入框只能输入数字,第一位不能是点,小数点后只有两位数字等等
问题:在input事件中正则匹配修改,处理完数据之后赋值给v-model绑定的值,但是仍然失效,通过日志打印数值发现已经修改成功,所以问题出在没有实时修改上
解决:
<input type="digit" v-model="inputParValue" @input="inputValue"/>
//购买弹窗内的输入面值
inputValue(e) {
let value = setValue(e.detail.value)
this.$nextTick(() => {
this.inputParValue = value;
})
加一个$nextTick()函数进行实时监听修改,就解决了,或者使用setTimeOut函数重复调用赋值应该也ok
原因:
- 我们将赋值操作放到nextTick或者setTimeout中时,他们会在当前视图更新完成后执行里面的回调,所以在v-model改变数据为0.251581111后,视图会先去更新一遍,此时值为0.251581111。
- 然后在nextTick中,对inputParValue重新赋值为正则处理过的数值,会再向任务队列里添加一个更新任务,此时取到的原始值就是0.251581111,新的值为处理后的值0.25,所以会触发视图的更新操作,于是完成了视图的更新