У меня есть Vue компонент enet для моего поля ввода. Я добавил некоторую проверку, которая гарантирует, что добавляются только цифры. Я добавил это в oninput.
Я хотел бы переместить это в метод, чтобы я мог добавить больше проверок (например, если Тип! == число)
Это работает хорошо, но со встроенной проверкой:
<input
v-bind="$attrs"
v-on="{
...$listeners,
input: event => $emit('input', event.target.value)
}"
oninput="this.value = Math.abs(this.value)"
/>
Вот как я хотел бы (но текущая проверка не работает):
<input
v-bind="$attrs"
v-on="{
...$listeners,
input: event => handleInput(event.target.value)
}"
/>
methods: {
handleInput(value) {
console.log(value);
// 1st emit
this.$emit("input", value);
// 2nd Validate -- Not working...
this.value = Math.abs(this.value);
}
}
Любые идеи о том, как я получаю this.value = Math.abs (this.value); вернуть обратно на вход?
ОБНОВЛЕНИЕ
Благодаря полезному комментарию я добился некоторого прогресса. Приведенный ниже код работает для первого символа, но не для текущих символов.
Если числа набраны, то проверка проходит true и ввод вводится. Если набран 1 символ (например, a), то мы выдадим цифру 0. Если введен второй символ, то будет выпущен символ (например, нажмите b, и теперь ввод 0b)
Я вижу this. $ emit ("input", 0) срабатывает, поэтому не уверен, почему char испускается.
methods: {
validateInput(value) {
// if it type isnt set as a number then leave
if (this.type != "number") {
return true;
}
// check if value a number
if (Math.abs(value)) {
return true;
}
return false;
},
handleInput(value) {
if (this.validateInput(value)) {
this.$emit("input", value);
} else {
this.$emit("input", 0);
}
}
}