Компонент Dialog в Element Plus представляет собой модальное окно, которое используется для отображения информации поверх основного контента страницы. Он позволяет создавать уведомления, формы подтверждения, диалоги с пользователем и другие интерактивные окна.
Для использования Dialog необходимо импортировать компонент в ваш проект и зарегистрировать его:
import { ElDialog, ElButton } from 'element-plus';
import 'element-plus/dist/index.css';
При использовании Vue 3 с синтаксисом Composition API регистрация компонентов может выглядеть так:
export default {
components: {
ElDialog,
ElButton
}
};
Если используется глобальная регистрация через
app.use(ElementPlus), явная регистрация компонентов не
требуется.
Диалоговое окно строится вокруг директивы v-model,
которая управляет видимостью компонента:
<template>
<el-button @click="dialogVisible = true">Открыть диалог</el-button>
<el-dialog
title="Пример диалога"
:visible.sync="dialogVisible"
width="50%"
:before-close="handleClose">
<span>Содержимое диалога может быть любым: текст, формы, таблицы.</span>
<template #footer>
<el-button @click="dialogVisible = false">Отмена</el-button>
<el-button type="primary" @click="confirmAction">Подтвердить</el-button>
</template>
</el-dialog>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const dialogVisible = ref(false);
const handleClose = (done) => {
console.log('Попытка закрыть диалог');
done();
};
const confirmAction = () => {
console.log('Действие подтверждено');
dialogVisible.value = false;
};
return {
dialogVisible,
handleClose,
confirmAction
};
}
};
</script>
visible / v-model:visible
– управляет отображением диалога. При true диалог открыт,
при false закрыт.title – заголовок диалога. Может быть
строкой или слотом для кастомного контента.width – ширина окна, поддерживается
как в пикселях (600px), так и в процентах
(50%).modal – логическое значение,
определяет, будет ли фон затемнён (по умолчанию true).before-close – функция обратного
вызова, вызываемая перед закрытием диалога. Позволяет реализовать
подтверждение закрытия.Dialog поддерживает несколько слотов:
#header – позволяет полностью
кастомизировать заголовок.default – основной контент диалога.
Можно использовать любые Vue-компоненты, таблицы, формы и т. д.#footer – нижняя панель кнопок. Часто
используется для кнопок “Отмена” и “Подтвердить”.Пример использования слотов:
<el-dialog :visible.sync="dialogVisible">
<template #header>
<h3 style="color: red;">Кастомный заголовок</h3>
</template>
<p>Текст основного содержимого</p>
<template #footer>
<el-button @click="dialogVisible = false">Закрыть</el-button>
<el-button type="primary">Сохранить</el-button>
</template>
</el-dialog>
modal=true) – блокирует
взаимодействие с остальной страницей.modal=false) –
позволяет пользователю работать с другими элементами страницы, не
закрывая диалог.Dialog поддерживает встроенные анимации через Vue Transition. Можно
менять эффект появления с помощью свойства
:modal-append-to-body и кастомных CSS-классов.
<el-dialog
:visible.sync="dialogVisible"
custom-class="fade-dialog">
</el-dialog>
<style>
.fade-dialog {
transition: all 0.3s ease;
}
</style>
top – отступ сверху, например
top="15vh".width – ширина, может быть выражена в
% или px.fullscreen – диалог открывается на
весь экран, игнорируя ширину и высоту.Пример использования полноэкранного диалога:
<el-dialog :visible.sync="dialogVisible" fullscreen>
<p>Полноэкранный диалог</p>
</el-dialog>
Dialog можно создавать программно через ElMessageBox
(аналог alert/confirm), что полезно для
уведомлений без явного рендера в шаблоне:
import { ElMessageBox } from 'element-plus';
ElMessageBox.confirm('Вы уверены, что хотите удалить элемент?', 'Подтверждение', {
confirmButtonText: 'Да',
cancelButtonText: 'Нет',
type: 'warning'
}).then(() => {
console.log('Подтверждено');
}).catch(() => {
console.log('Отменено');
});
Dialog.v-model:visible или
.sync для управления видимостью, чтобы реактивность
оставалась корректной.before-close полезен для предотвращения случайного
закрытия, особенно при незаполненных формах.Эти подходы позволяют создавать гибкие, управляемые и кастомизируемые модальные окна с минимальными усилиями, используя весь потенциал Element Plus Dialog.