В библиотеке Naive UI компонент Dialog
представляет собой мощный инструмент для отображения модальных окон и
диалогов с пользователем. Он позволяет реализовать как простые
уведомления, так и сложные формы с подтверждением действий. Одной из
ключевых особенностей является наличие хелперов,
упрощающих работу с диалогами, без необходимости вручную управлять их
состоянием через v-model или слоты.
Хелперы в Naive UI — это функции, которые создают и управляют диалогами программно. Основные хелперы:
dialog.infodialog.successdialog.warningdialog.errordialog.confirmКаждая из этих функций возвращает Promise, который позволяет обрабатывать результат взаимодействия пользователя с диалогом, например, подтверждение или отмену действия.
import { dialog } from 'naive-ui';
dialog.info({
title: 'Информация',
content: 'Это информационный диалог',
}).then(() => {
console.log('Пользователь закрыл диалог');
});
В примере выше диалог создается динамически, и его закрытие можно
отследить через метод .then().
Пример использования с кастомными кнопками и обработкой действий:
dialog.confirm({
title: 'Подтвердите действие',
content: 'Вы уверены, что хотите удалить элемент?',
positiveText: 'Да',
negativeText: 'Нет',
onPositiveClick: () => console.log('Элемент удален'),
onNegativeClick: () => console.log('Действие отменено'),
});
Хелперы dialog.confirm и аналогичные поддерживают
асинхронные функции. Это позволяет, например, запускать сетевые запросы
до закрытия окна:
dialog.confirm({
title: 'Удаление данных',
content: 'Идет процесс удаления...',
onPositiveClick: async () => {
await api.deleteItem(itemId);
console.log('Данные успешно удалены');
}
});
Использование асинхронных обработчиков предотвращает мгновенное закрытие окна, пока выполняется важная операция.
Для всех диалогов можно задавать следующие визуальные параметры:
info,
success, warning, error,
confirm). Влияет на иконку и цветовую схему.dialog.success({
title: 'Успех',
content: 'Операция выполнена успешно',
width: '500px',
scrollable: true,
});
Хелперы возвращают объект dialogInstance, который позволяет закрывать или обновлять диалог программно:
const dialogInstance = dialog.info({
title: 'Загрузка',
content: 'Пожалуйста, дождитесь завершения'
});
// Закрыть диалог через 3 секунды
setTimeout(() => dialogInstance.destroy(), 3000);
Методы объекта:
destroy() — закрывает диалог.update(options) — обновляет свойства окна (title,
content, кнопки).Пример динамического обновления содержимого:
const instance = dialog.info({
title: 'Процесс',
content: 'Начало операции...'
});
setTimeout(() => {
instance.update({
content: 'Операция почти завершена...'
});
}, 2000);
Хелперы поддерживают передачу контента через функцию или JSX, что позволяет создавать интерактивные элементы внутри диалога:
import { h } from 'vue';
dialog.info({
title: 'Сложный контент',
content: () => h('div', [
h('p', 'Текст с форматированием'),
h('button', { onClick: () => console.log('Кнопка внутри диалога') }, 'Нажми меня')
])
});
Такой подход делает возможным реализацию форм, списков и сложных
интерфейсов без использования стандартного компонента
n-dialog вручную.
dialog.confirm по умолчанию возвращает
Promise, который резолвится, если пользователь нажал
кнопку подтверждения, и реджектится при отмене.await:try {
await dialog.confirm({ title: 'Удалить файл?', content: 'Это действие нельзя отменить' });
console.log('Файл удален');
} catch {
console.log('Удаление отменено');
}
onPositiveClick
автоматически блокируют закрытие окна до завершения Promise.v-model, когда требуется быстрый и динамический
диалог.info, success,
error) использовать соответствующие функции вместо
confirm.content с JSX или Vue-слотами.destroy и update), если диалог должен
изменяться динамически.Эти возможности делают хелперы Naive UI Dialog гибким инструментом для построения любых модальных интерфейсов в современных приложениях на Vue.js и JavaScript.