v-model — это директива Vue для двусторонней привязки данных к элементам форм. Она автоматически синхронизирует значение переменной с вводом пользователя. Это синтаксический сахар над :value и @input.
Ключевые аспекты
Двусторонняя привязка — изменение переменной обновляет инпут и наоборот
Работает с разными типами — text, checkbox, radio, select, textarea
Автоматический выбор события — input для текста, change для checkbox/radio
Модификаторы — .lazy, .number, .trim для настройки поведения
input type="text", type="email", type="password" и другие текстовые
input type="checkbox" — привязка к boolean или массиву
input type="radio" — привязка к одному значению
select — одиночный или множественный выбор
textarea — многострочный текст
Частые ошибки
Забывают про .value при работе с ref внутри script
Используют v-model с нереактивными переменными
Путают поведение checkbox с одним значением и массивом
Не используют модификатор .number для числовых полей
Рекомендации
Используйте ref или reactive для переменных с v-model
Применяйте .number для полей с числами
Используйте .trim для полей с текстом
Для форм с множеством полей удобнее reactive
Введение и проблематика
Работа с формами — одна из базовых задач во фронтенде. Нужно читать значения полей, обновлять их при изменении пользователем, и синхронизировать с состоянием приложения. Директива v-model делает это автоматически.
v-model — синтаксический сахар, который объединяет привязку значения (:value) и обработку события ввода (@input) в одну конструкцию.
Базовая теория
Что такое v-model
v-model создаёт двустороннюю привязку между переменной и элементом формы:
По умолчанию v-model обновляется на каждый ввод символа. С .lazy — только при потере фокуса:
vue
<inputv-model.lazy="message" />
.number — преобразование в число
vue
<scriptsetup>import { ref } from'vue'constage=ref(0)</script><template><!-- Без .number age будет строкой --> <inputv-model.number="age"type="number" /> <p>Возраст: {{ age }} (тип: {{ typeof age }})</p></template>