| Директивы шаблона Vue |
|
| Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Директивы в Vue — это специальные HTML-атрибуты с префиксом `v-`, которые добавляют реактивное поведение элементам в шаблоне. Они являются одной из ключевых возможностей фреймворка. Помимо v-html, существует несколько основных категорий директив. Вот список основных директив с кратким описанием:
Проп (prop) в Vue — это пользовательский атрибут, который родительский компонент передаёт дочернему компоненту. Пропы — это основной механизм одностороннего потока данных сверху вниз. [Простая аналогия] Представьте, что компонент — это функция, а пропсы — это её аргументы. Родитель "вызывает" дочерний компонент, передавая ему данные (аргументы/пропсы), а компонент использует их для своего отображения и логики. Как это работает на практике: 1. В родительском компоненте вы передаёте данные как атрибут HTML: < !-- Родительский компонент Parent.vue передаёт проп `title` --> < template> < ChildComponent :title="parentTitle" :count="5" /> < /template> < script> 2. В дочернем компоненте вы явно объявляете пропсы и используете их как обычные переменные: < !-- Дочерний компонент ChildComponent.vue получает пропсы --> < template> < div> < h1>{{ title }}< /h1> < !-- Используем проп --> < p>Передано чисел: {{ count }}< /p> < /div> < /template> < script> [Ключевые характеристики пропсов]
[Пропсы vs локальные данные (`data()`)]
[Частый паттерн: создание "локальной копии"] Поскольку напрямую менять проп нельзя, часто создают локальную переменную на его основе: export default { [Почему это важно в контексте `v-bind`] Директива `v-bind` (или `:`) — это основной способ передачи динамических пропсов. Без неё в атрибут попадёт просто строка "parentTitle", а не значение переменной. `title="parentTitle"` → Проп получит строку "parentTitle" `:title="parentTitle"` → Проп получит значение переменной `parentTitle` (например, "Привет от родителя!") Таким образом, проп — это параметр компонента, а `v-bind` — "инструмент доставки" этого параметра от родителя к ребёнку. [Подробнее о ключевых директивах] 1. Условный рендеринг: отличие v-if и v-show v-if — "ленивая" директива. Если условие ложно, элемент не создаётся в DOM. Идеально для дорогих в рендере элементов или когда условие меняется редко. v-show — элемент всегда создаётся в DOM, но переключается через CSS (`display`). Лучше использовать для частых переключений, так как переключение дешевле. 2. Работа со списками: v-for Самая мощная директива для рендеринга данных. Умеет работать с массивами, объектами и числами. Ключевое правило: всегда указывайте уникальный `:key` для оптимальной реактивности. < li v-for="item in items" :key="item.id">{{ item.name }}< /li> 3. Двустороннее связывание: v-model "Синтаксический сахар" для связки `:value` + `@input`. В Vue 3 её можно кастомизировать для компонентов через опции `modelValue` и `update:modelValue`. Для разных типов input (`checkbox`, `select`) работает "из коробки". 4. Модификаторы директив Многие директивы (особенно v-on и v-model) поддерживают модификаторы — специальные постфиксы через точку для изменения поведения. - Для v-on: `@click.stop` (остановка всплытия), `@keyup.enter` (срабатывание на Enter), `@submit.prevent` (отмена перезагрузки страницы). - Для v-model: `v-model.lazy` (обновление по событию `change`), `v-model.number` (приведение к числу), `v-model.trim` (удаление пробелов). [Краткие рекомендации по выбору] - Для условного показа часто переключаемого элемента → v-show. Это основные встроенные директивы. Также вы можете создавать собственные директивы с помощью `app.directive()` для низкоуровневых манипуляций с DOM. Пример v-html. Директива v-html используется для генерации динамически изменяемого кода html. Например, если создать переменную JavaScript: let mylink = "< a href='https://microsin.ru'>Мой сайт< /a>" .. и вставить ссылку на эту переменную в шаблон: < template> < header>Лого< /header> < main>{{ mylink }}< /main> < footer>Футер< /footer> < /template> .. то при вставке этой переменной в шаблон просто отобразится текст содержимого переменной mylink. Чтобы вместо этого текста была сформирована ссылка, примените директиву v-html следующим образом: < main v-html="mylink">< /main> Теперь будет правильно сформирована ссылка: Пример v-bind для привязки атрибута. С помощью директивы v-bind (или ':') привязывают атрибуты к элементам шаблона. < script setup> В результате получится вот такой код HTML: < !DOCTYPE html> Ключевое слово v-bind можно просто заменить двоеточием: < main v-html="mylink" :class="color">< /main> Пример v-bind для привязки идентификатора. Можно динамически добавлять идентификаторы: < script setup> Сокращенная запись того же самого: < main :id>Контент< /main> В результате получится код: < body> < div id="app" data-v-app=""> < main id="blue">Контент< /main> < /div> < script type="module" src="./vue-app_files/main.js">< /script> < /body> [Ссылки] |