Для чого використовується v-model?
v-model - це директива Vue для двосторонньої прив'язки даних.
Вона пов'язує значення в шаблоні (input, select, textarea, компонент) зі змінною в стані, так що оновлення значення в DOM змінює дані, а оновлення даних змінює DOM.
Простими словами:
v-modelавтоматично синхронізує дані та інтерфейс.
Як працює v-model (на прикладі input)
<input v-model="name">Це синтаксичний цукор для:
<input
:value="name"
@input="name = $event.target.value"
/>Тобто Vue сам робить v-bind + v-on.
Підтримка різних елементів форм
Текстові інпути
<input v-model="text">Чекбокс
<input type="checkbox" v-model="checked">Радіокнопки
<input type="radio" value="A" v-model="choice">
<input type="radio" value="B" v-model="choice">Select
<select v-model="selected">
<option value="1">One</option>
</select>Чекбокси з масивами
<input type="checkbox" value="A" v-model="selectedItems">Якщо чекбокс увімкнено -> value додається в масив.
Якщо вимкнено -> значення видаляється.
Модифікатори v-model
.trim
Автоматично видаляє пробіли по краях
<input v-model.trim="name">.number
Перетворює значення в число
<input v-model.number="age">.lazy
Спрацьовує при change, а не при input
<input v-model.lazy="value">v-model у компонентах (дуже важлива тема)
У Vue 3:
<MyInput v-model="username" />Vue інтерпретує це як:
- передати проп
modelValue - слухати подію
update:modelValue
Приклад компонента:
<script>
export default {
props: {
modelValue: String
},
emits: ['update:modelValue']
}
</script>
<template>
<input
:value="modelValue"
@input="$emit('update:modelValue', $event.target.value)"
>
</template>Іменовані моделі (Vue 3)
Можна мати кілька v-model в одному компоненті:
<DatePicker v-model:start="startDate" v-model:end="endDate" />Компонент має працювати з modelValue, заміненим на аргумент:
- проп:
start - подія:
update:start
Як працює v-model "під капотом"
Кожен v-model перетворюється на комбінацію:
v-bindдля передачі значенняv-onдля оновлення даних
Тобто фактично це:
:prop="value"
@event="value = $event"Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.