</> Praktum

Главная / Vue / Директивы

Урок 1 · Vue

Директивы Vue: данные в разметке

Директивы — специальные атрибуты Vue. С их помощью можно показать значение, скрыть блок или вывести список прямо из данных.

Вывести значение

<script setup>
const title = 'Мой список'
</script>

<h1>{{ title }}</h1>

Двойные фигурные скобки выводят значение переменной в шаблон.

Показать блок по условию

<p v-if="isReady">
  Можно начинать урок.
</p>

Если isReady равно true, абзац будет на странице. Если нет — Vue его не покажет.

Не путай: HTML-атрибуты задают свойства элемента, а 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 только прячет его стилем.