Основные директивы в Vue.js
Vue.js использует директивы — специальные атрибуты, которые управляют поведением элементов DOM. Они позволяют динамически изменять разметку, управлять событиями, связывать данные и выполнять другие важные задачи.
v-if / v-else / v-else-if
Эти директивы используются для условного отображения элементов в зависимости от состояния приложения.
<template>
<p v-if="isLoggedIn">Добро пожаловать!</p>
<p v-else>Пожалуйста, войдите в систему.</p>
</template>
<script setup>
import { ref } from 'vue';
const isLoggedIn = ref(false);
</script>
v-ifотображает элемент, только еслиisLoggedInистинно.v-elseпоказывается, еслиisLoggedInложно.ref(false)создаёт реактивное состояние, которое можно изменять.
v-for
Позволяет отобразить массив данных, создавая элементы динамически.
<template>
<ul>
<li v-for="(item, index) in items" :key="index">{{ item }}</li>
</ul>
</template>
<script setup>
import { ref } from 'vue';
const items = ref(['Яблоко', 'Банан', 'Апельсин']);
</script>
v-forперебирает массивitems, создавая<li>для каждого элемента.:key="index"помогает Vue эффективно обновлять список.
Не злоупотребляйте v-if внутри v-for:
Это может привести к низкой производительности. Лучше фильтровать данные перед их отображением.
v-bind
Позволяет динамически изменять атрибуты элементов, например, src, class, style и другие.
<template>
<img v-bind:src="imageUrl" alt="Картинка" />
</template>
v-bind:src="imageUrl"динамически изменяет источник изображения.
Сокращайте v-bind:
Вместо v-bind:src="imageUrl" можно писать :src="imageUrl".
v-model
Позволяет связывать данные с элементами формы.
<template>
<input v-model="text" placeholder="Введите текст" />
<p>Вы ввели: {{ text }}</p>
</template>
v-modelсвязываетtextс<input>, автоматически обновляя<p>.
Будьте осторожны с v-model:
- Для примитивных значений (string, number) работает без проблем.
- Для объектов и массивов лучше делать копии, чтобы избежать неожиданных изменений.
v-on
Используется для добавления обработчиков событий, аналогично addEventListener.
<template>
<button v-on:click="sayHello">Нажми меня</button>
</template>
<script setup>
const sayHello = () => {
alert('Привет, мир!');
};
</script>
v-on:click="sayHello"добавляет обработчик нажатия.sayHello()вызывается при клике по кнопке.
Сокращайте v-on:
Вместо v-on:click="sayHello" можно писать @click="sayHello".
v-show
Отличается от v-if, так как скрывает элемент с помощью display: none, а не удаляет его из DOM.
<template>
<p v-show="isVisible">Этот текст можно скрыть.</p>
</template>
v-show="isVisible"контролирует видимость черезdisplay: none.isVisible = falseпросто скрывает элемент, не удаляя его из DOM.
Используйте v-if и v-show в зависимости от ситуации:
- Если элемент часто скрывается и показывается, лучше использовать v-show, так как он просто меняет display: none.
- Если элемент редко нужен, лучше v-if, так как он полностью удаляет элемент из DOM.
Итог
Директивы Vue.js — это мощный инструмент для управления разметкой и поведением элементов на странице. Они помогают сделать код более чистым, удобным и читаемым.
Используя директивы, можно легко управлять отображением, обработкой событий, привязкой данных и списками. Понимание этих ключевых директив значительно облегчит разработку на Vue.js и сделает ваш код более эффективным.