Директивы в Element Plus предоставляют возможность напрямую управлять поведением DOM-элементов на уровне шаблона, расширяя стандартные возможности Vue. Они представляют собой функциональные конструкции, которые позволяют добавлять динамическое поведение без написания сложного JavaScript-кода.
В Element Plus большинство директив связано с визуальными и интерактивными компонентами, включая управление фокусом, видимостью, отображением всплывающих подсказок, валидацией форм и другими реактивными действиями.
v-loadingДиректива v-loading используется для отображения
индикатора загрузки поверх компонентов или элементов.
Синтаксис:
<template>
<el-button v-loading="loading">Отправить</el-button>
</template>
<script>
export default {
data() {
return {
loading: false
};
}
};
</script>
Особенности:
Настройка текста и спиннера:
<el-button v-loading="loading" element-loading-text="Загрузка..." element-loading-spinner="el-icon-loading">
Отправить
</el-button>
v-click-outsideДиректива v-click-outside предназначена для обработки
кликов за пределами элемента, что особенно полезно для выпадающих
списков, модальных окон и контекстных меню.
Пример использования:
<template>
<el-dropdown v-click-outside="closeDropdown">
<span class="el-dropdown-link">Меню</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>Опция 1</el-dropdown-item>
<el-dropdown-item>Опция 2</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
<script>
export default {
methods: {
closeDropdown() {
this.$refs.dropdown.hide();
}
}
};
</script>
Особенности:
v-transfer-dom
(или teleport в Vue 3)Эта директива отвечает за перенос DOM-элемента в другое место DOM-дерева, что важно для модальных окон, тултипов и всплывающих списков, чтобы избежать проблем с CSS overflow или z-index.
Пример с модальным окном:
<el-dialog v-model="dialogVisible" v-transfer-dom>
<p>Содержимое модального окна</p>
</el-dialog>
Особенности:
teleport в Vue
3.Element Plus позволяет создавать собственные директивы для решения
специфических задач. Процесс создания включает определение методов
mounted,
updated и
unmounted.
Пример кастомной директивы подсветки:
import { createApp } from 'vue';
const highlightDirective = {
mounted(el, binding) {
el.style.backgroundColor = binding.value || 'yellow';
},
updated(el, binding) {
el.style.backgroundColor = binding.value || 'yellow';
},
unmounted(el) {
el.style.backgroundColor = '';
}
};
const app = createApp({});
app.directive('highlight', highlightDirective);
Использование:
<p v-highlight="'lightblue'">Подсвеченный текст</p>
Особенности пользовательских директив:
mounted,
updated и unmounted.Element Plus предоставляет встроенные директивы для работы с формами,
такие как v-model для двусторонней привязки данных и
специальные проверки полей.
Пример привязки с валидацией:
<el-form :model="form" :rules="rules" ref="formRef">
<el-form-item label="Имя" prop="name">
<el-input v-model="form.name"></el-input>
</el-form-item>
</el-form>
Особенности:
v-model тесно интегрирована с реактивной
системой Vue.mounted,
updated и unmounted обеспечивают корректное
управление ресурсами и очистку событий.Директивы в Element Plus формируют мощный инструмент для упрощения разработки интерфейсов, позволяя концентрироваться на логике приложения и реактивности данных, при этом обеспечивая богатый функционал готовых компонентов.