Использовать прослушиватель событий @input
.При изменении значения в одном входе, который изменился, будет обновляться значение другого входа.
<template>
<div>
<input v-model="value1" @input="update2">
to
<input v-model="value2" @input="update1">
</div>
</template>
<script>
const mul = 1.5;
export default {
data: () => ({
value1: null,
value2: null
}),
methods: {
update1() {
this.value1 = this.value2 / mul;
},
update2() {
this.value2 = this.value1 * mul;
}
}
};
</script>
Вы можете сделать это с помощью watch
, но тогда вам нужно будет предотвратить цикл обновления с помощьюдополнительная проверка:
watch: {
value1(val) {
const tmp = val * mul;
if (tmp !== this.value2) {
this.value2 = tmp;
}
},
value2(val) {
const tmp = val / mul;
if (tmp !== this.value1) {
this.value1 = tmp;
}
}
},
Но этот код предполагает, что умножение на x и последующее деление на x приводит к точно такому же числу, и хотя это математически верно, с плавающей точкой (тип числа javascript) есть исключения, от которых вам нужно защититься (NaN, округление), которые сделают код сложным.
Поэтому я рекомендую подход «слушатель события ввода».