我想在手表中将数字更改为int,但它不起作用。
index.vue:
<template>
<test v-model="value" />
</template>
<script>
import Test from './test.vue';
export default {
components: {
test: Test,
},
data() {
return {
value: 1,
};
},
watch: {
value(val) {
this.value = parseInt(val);
// this.value = 2;
}
}
};
</script>
test.vue:
<template>
<div class="el-input-number">
<input
:value="currentValue"
@input="handleInput"
ref="input"
/>
</div>
</template>
<script>
export default {
name: 'ElInputNumber',
props: {
value: {
default: 0
},
},
data() {
return {
currentValue: 1
};
},
watch: {
value(value) {
console.log('value change', value);
let newVal = Number(value);
if (isNaN(newVal)) return;
this.currentValue = newVal;
this.$emit('input', newVal);
}
},
computed: {
},
methods: {
setCurrentValue(newVal) {
const oldVal = this.currentValue;
if (oldVal === newVal) return;
this.$emit('change', newVal, oldVal);
this.$emit('input', newVal);
this.currentValue = newVal;
},
handleInput(e) {
const value = e.target.value;
const newVal = Number(value);
if (!isNaN(newVal)) {
this.setCurrentValue(newVal);
}
}
}
};
</script>
主要代码是this.value = parseInt(val)
初始值为1.我在输入中键入1.1。然后我看到了变化
设置this.value
后,不会调用值监视功能。没有日志
更奇怪的是,如果我将this.value = parseInt(val)
更改为this.value = 2
,它会运行一次,但第二次更改值时,它不起作用。
代码在这里:https://github.com/lext-7/vue-watch-component-demo。
运行它,并在该输入中键入1.1。你会发现它不会变成1。