v-model - двостороння прив'язка поля форми до стану: введене потрапляє в змінну, зміна змінної - у поле.
<script setup>
import { ref } from 'vue';
const name = ref('');
const agree = ref(false);
const city = ref('kyiv');
const tags = ref([]);
</script>
<template>
<input v-model="name">
<input type="checkbox" v-model="agree">
<select v-model="city">
<option value="kyiv">Київ</option>
<option value="lviv">Львів</option>
</select>
<label><input type="checkbox" value="php" v-model="tags"> PHP</label>
<label><input type="checkbox" value="vue" v-model="tags"> Vue</label>
</template>
Для різних елементів v-model використовує різні властивості й події: value + input для тексту, checked + change для чекбоксів і радіо, value + change для select. Чекбокси з value, прив'язані до масиву, додають і прибирають значення.
Модифікатори:
.lazy- оновлювати наchange(вихід з поля), а не на кожне натискання;.number- перетворювати введене на число (parseFloat). Якщо перетворити неможливо, лишається рядок. Дляtype="number"застосовується автоматично;.trim- обрізати пробіли на початку й у кінці.
<input v-model.trim="email" type="email">
<input v-model.number="age" type="number">
<textarea v-model.lazy="bio"></textarea>
Пастки:
v-modelігнорує атрибутиvalue,checked,selectedу розмітці - джерело істини лише стан. Початкове значення задається вref;selectбез початкового значення, що збігається з опцією, в iOS не дає вибрати першу опцію - тому додають порожню<option disabled value="">Оберіть місто</option>;- IME (введення ієрогліфів, частина мобільних клавіатур) -
v-modelне оновлює значення під час складання символу; якщо потрібно - власний обробникinput; v-modelнаprop- не можна: props належать батькові. Для компонента-поля -defineModel().
Значення не лише рядки: :value="{ id: 1 }" на опціях select чи чекбоксах дає змогу прив'язувати об'єкти, а true-value/false-value на чекбоксі - власні значення замість true/false.