在输入框中输入20。按照写法1,value值变为10,但视图中还是显示20。
写法2,提前增加了一次无关的赋值,视图也会跟随最后value的值改变。写法3视图也会跟随value改变。
请问谁能帮我讲一下,写法1为什么视图不跟随数据value改变?是什么原理?什么原因?非常困惑中。。
<template>
<input type="text" :value="value" @change="editVal">
</template>
<script>
function isValueNumber(value) {
return /(^-?[0-9]+\.{1}\d+$)|(^-?[1-9][0-9]*$)|(^-?0{1}$)/.test(value + "");
}
export default {
data() {
return {
value: 10,
max: 10,
min: 0
};
},
methods: {
editVal: function(event) {
var val = event.target.value.trim();
if (isValueNumber(val)) {
val = Number(val);
//写法1:视图不跟随value改变
if (val > this.max) {
val = this.max;
} else if (val < this.min) {
val = this.min;
}
this.value = val;
// 写法2:为value提前增加一次无关的赋值,视图也会跟随value改变
// if (val > this.max) {
// val = this.max;
// } else if (val < this.min) {
// val = this.min;
// }
// this.value = 0; //无关的赋值
// this.value = val;
// 写法3:视图跟随value改变
// this.value = val;
// if (val > this.max) {
// this.value = this.max;
// } else if (val < this.min) {
// this.value = this.min;
// }
} else {
event.target.value = this.value;
}
}
}
}
</script>
感谢 aco的回答解决了我的问题:vue 判断出 value 的值没有发生变化就不会进行视图层的更新
试试这个
对于表单的绑定,不会时时刷新的