Урок 1 · Vue
Директивы Vue: данные в разметке
Директивы — специальные атрибуты Vue. С их помощью можно показать значение, скрыть блок или вывести список прямо из данных.
Вывести значение
<script setup>
const title = 'Мой список'
</script>
<h1>{{ title }}</h1>Двойные фигурные скобки выводят значение переменной в шаблон.
Показать блок по условию
<p v-if="isReady">
Можно начинать урок.
</p>Если isReady равно true, абзац будет на странице. Если нет — Vue его не покажет.
Условие и показ — разные директивы
v-if не создаёт блок, пока условие ложно. v-show только прячет его стилем, а разметка остаётся. Для редкого сообщения об ошибке подходит v-if. Для вкладки, которую часто переключают и которая хранит внутреннее состояние, чаще спокойнее v-show.
Не вешай v-if и v-for на один элемент. Сначала отфильтруй список в вычисляемом свойстве, потом выведи его циклом. Так проще понять и порядок, и ключи.
<p v-if="error">{{ error }}</p>
<ul>
<li v-for="item in visibleItems" :key="item.id">
<label>
<input type="checkbox" v-model="item.done">
{{ item.title }}
</label>
</li>
</ul>Привязка атрибутов
Обычный атрибут без двоеточия — всегда строка. :disabled="seats === 0" передаёт логическое значение. Класс удобно собирать объектом: активными станут те ключи, чьё значение истинно. Не склеивай длинную классовую строку вручную в трёх местах.
Событие пишется как @click или @submit.prevent. Модификатор prevent вызывает preventDefault, чтобы форма не перезагружала страницу. Это читаемее, чем помнить про метод события в каждом обработчике.
Ключи и поля
- У
v-forесть стабильный:key, и это не индекс, если список сортируют. v-modelна флажке пишет логическое значение, а не строку.- Несколько
v-modelна разных полях не делят одно состояние. - Директива не заменяет функцию там, где расчёт уже на десять строк. Вынеси его в
computed.
v-if с противоположным условием на двух соседних ветках.Практика
Создай переменную с именем пользователя и покажи приветствие. Затем добавь условный текст «Урок начат».
Дальше: WordPress →Как комбинировать директивы Vue
Директива добавляет элементу реактивное поведение. v-bind связывает атрибут с данными, v-on подписывает на событие, v-if управляет созданием элемента, а v-show только переключает display. Для часто скрываемого блока обычно дешевле v-show; для редкого условия — v-if.
При выводе списка через v-for добавляй уникальный :key. Не используй индекс массива, если элементы могут сортироваться или удаляться: Vue должен узнавать каждый объект между обновлениями. Сложные выражения лучше переносить в computed или метод, чтобы шаблон оставался читаемым.
Разберём рабочий пример
<button :disabled="loading" @click="loadLessons">
{{ loading ? 'Загрузка…' : 'Показать уроки' }}
</button>
<ul v-if="lessons.length">
<li v-for="lesson in lessons" :key="lesson.id">{{ lesson.title }}</li>
</ul>Не копируй пример вслепую: измени данные, убери одну строку и посмотри, как меняется результат. Такой эксперимент быстрее показывает роль каждой части кода, чем простое чтение.
Проверка перед использованием
- У каждого элемента v-for есть устойчивый key.
- Сложная логика вынесена из шаблона.
- v-if и v-show выбраны по частоте переключения.
- События названы по выполняемому действию.
Практикумы по теме
- Клик во Vue — В Vue клик записывается прямо в шаблоне и меняет реактивное значение.
- Условие во Vue — v-if убирает элемент, пока условие ложно. v-show только прячет его стилем.