Для использования диалогов в Element Plus необходимо сначала подключить библиотеку к проекту. Если используется Vue 3, рекомендуется установка через npm или yarn:
npm install element-plus --save
или
yarn add element-plus
После установки библиотеку подключают в main.js или
main.ts:
import { createApp } from 'vue';
import App from './App.vue';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
const app = createApp(App);
app.use(ElementPlus);
app.mount('#app');
Эта настройка обеспечивает глобальное использование всех компонентов
Element Plus, включая диалоги (ElDialog).
Компонент ElDialog предназначен для отображения
модальных окон. Ключевые свойства:
model-value – управляет видимостью
диалога.title – заголовок окна.width – ширина диалога.before-close – функция, вызываемая
перед закрытием (можно использовать для подтверждений).Пример базового использования:
Открыть диалог
Содержимое диалога здесь.
Закрыть
Подтвердить
Особенности:
data.footer позволяет кастомизировать
кнопки управления.@close можно использовать для логирования или
выполнения дополнительных действий.Помимо стандартного связывания с v-model
(model-value), Element Plus поддерживает
программное управление диалогом через методы. Это
удобно для динамического создания и отображения диалогов без
предварительной разметки.
ElMessageBoxДля быстрого открытия модального окна используется
ElMessageBox. Импорт:
import { ElMessageBox, ElMessage } from 'element-plus';
ElMessageBox.confirm('Вы действительно хотите удалить элемент?', 'Внимание', {
confirmButtonText: 'Да',
cancelButtonText: 'Нет',
type: 'warning',
}).then(() => {
ElMessage({
type: 'success',
message: 'Элемент удалён'
});
}).catch(() => {
ElMessage({
type: 'info',
message: 'Удаление отменено'
});
});
Пояснения:
confirm возвращает Promise, что
позволяет обрабатывать результат через .then() и
.catch().confirmButtonText и cancelButtonText
задают подписи кнопок.type влияет на визуальное оформление.Метод ElMessageBox поддерживает создание диалога
с пользовательским HTML или компонентами:
ElMessageBox({
title: 'Настройки',
message: 'Выберите параметры:',
dangerouslyUseHTMLString: true,
showCancelButton: true,
confirmButtonText: 'Сохранить',
cancelButtonText: 'Отмена',
callback(action) {
if (action === 'confirm') {
console.log('Параметры сохранены');
} else {
console.log('Изменения отменены');
}
}
});
Ключевые моменты:
dangerouslyUseHTMLString позволяет использовать HTML в
сообщении.callback – альтернативный способ обработки закрытия,
если не нужен Promise.Можно программно создавать диалоги на основе Vue-компонентов, что особенно удобно для сложных интерфейсов.
import { h, render } from 'vue';
import MyDialogContent from './MyDialogContent.vue';
function openDynamicDialog() {
const container = document.createElement('div');
document.body.appendChild(container);
const vnode = h('el-dialog', {
modelValue: true,
title: 'Динамический диалог',
width: '600px',
'onUpdate:modelValue': (val) => {
if (!val) {
render(null, container);
document.body.removeChild(container);
}
}
}, {
default: () => h(MyDialogContent),
footer: () => h('el-button', {
onClick: () => vnode.component.props['onUpdate:modelValue'](false)
}, 'Закрыть')
});
render(vnode, container);
}
Особенности метода:
h и render для создания
виртуального узла.Element Plus предоставляет свойства для тонкой настройки:
modal – наличие фоновой подложки (по
умолчанию true).close-on-click-modal – закрытие при
клике на затемнённый фон.close-on-press-escape – закрытие по
нажатию Esc.destroy-on-close – удаление
содержимого из DOM при закрытии.append-to-body – добавление диалога в
конец body, полезно при работе с overflow
контейнерами.Пример:
Содержимое настроек.
ElMessage и
ElNotification для создания полного
пользовательского опыта.