хорошо, вы можете использовать <input type=number...
, как все, что здесь сказано, но если вы хотите обрабатывать вручную, то вы можете изменить свой el.target.value в обработчике, например,
<template>
<div id="app">
<input
:value="tel"
@input="setTel"
placeholder="0"
/>
<p>{{ tel }}</p>
</div>
</template>
<script>
export default {
name: "App",
data: () => ({
tel: "1234"
}),
methods: {
setTel(v) {
v.target.value = v.target.value.replace(/[^0-9]/g, "");
this.tel = v.target.value
/*this.tel = v.target.value = v.target.value.replace(/[^0-9]/g, "");*/
}
}
};
</script>
и для части, в которой vue показывает текст на входе, потому что, когда вы назначаете то же значение после замены текста, vue не обновляет состояние этого конкретного элемента, чтобы избежать дополнительной визуализации