В Vue.js модификаторы для v-model
предоставляют возможность автоматически трансформировать значение при связывании данных. Вот основные поддерживаемые модификаторы:
Изменяет поведение привязки данных: вместо обновления на каждом событии input
(по умолчанию), обновление происходит по событию change
.
Пример:
<input v-model.lazy="message">
.lazy
: обновляется при каждом нажатии клавиши..lazy
: обновляется при потере фокуса (например, при нажатии Tab или клике вне поля).Автоматически преобразует введённое пользователем значение в число (если возможно). Если преобразование не удаётся, возвращается исходная строка.
Пример:
<input v-model.number="age" type="number">
Удаляет пробелы в начале и конце введённой строки.
Пример:
<input v-model.trim="username">
Модификаторы можно комбинировать. Порядок применения: .trim
→ .number
→ .lazy
.
Пример:
<input v-model.trim.number.lazy="value">
input
, textarea
, select
).model.modifiers
.app.component('custom-input', {
props: {
modelValue: String,
modelModifiers: {
default: () => ({})
}
},
emits: ['update:modelValue'],
methods: {
emitValue(e) {
let value = e.target.value
if (this.modelModifiers.capitalize) {
value = value.charAt(0).toUpperCase() + value.slice(1)
}
this.$emit('update:modelValue', value)
}
},
template: ```<input :value="modelValue" @input="emitValue">```
})
Использование:
<custom-input v-model.capitalize="text" />
Vue предоставляет три основных модификатора (.lazy
, .number
, .trim
) с чётко определённым поведением, а также механизм для создания собственных модификаторов в кастомных компонентах.