Я не использую ElementUI, поэтому не могу подтвердить, что el-input-number
примет отформатированное строковое значение. Возможно, этот компонент внутренне удалит все нечисловые символы c из проповеди value
. Однако приведенное ниже решение работает со стандартным вводом текста.
Чтобы отобразить что-то другое, чем вы храните, вам нужно разделить директиву v-model
на ее исходные части. v-model
- это просто ярлык для связывания value
и @input
в одной директиве. Неформатированный номер следует хранить в поле form.qty
, но предоставить компоненту el-input-number
форматированный номер через вычисляемое свойство, например:
<template>
<!-- INSTEAD OF v-model, use :value and @input -->
<el-input-number :value="formattedQty" @input="handleQtyInput" />
</template>
<script>
export default {
data () {
return {
form: {
qty: "0",
}
}
},
computed: {
formattedQty () {
//Add the commas back to the string
let qty = this.form.qty + ""
return qty.replace(/\B(?=(\d{3})+(?!\d))/g, ",")
}
},
methods: {
handleQtyInput (newValue) {
//Make sure the stored qty is not formatted
this.form.qty = newValue.toString().replace(/\D/g, "")
}
}
}
</script>