Popconfirm — это компонент библиотеки Naive UI, предназначенный для создания всплывающих подтверждений действий пользователя. Он используется, когда требуется предотвратить случайное выполнение критических операций, например удаление элемента или отправку формы. Основная особенность Popconfirm — сочетание всплывающего окна с кнопками подтверждения и отмены.
Компонент Popconfirm оборачивает целевой элемент и реагирует на события пользователя, такие как клик. Минимальный пример использования:
import { NPopconfirm, NButton } from 'naive-ui'
<NPopconfirm
trigger="click"
title="Вы уверены, что хотите удалить элемент?"
onPositiveCl ick={() => console.log('Подтверждено')}
onNegativeCl ick={() => console.log('Отменено')}
>
<NButton>Удалить</NButton>
</NPopconfirm>
Ключевые моменты:
click, hover,
focus).По умолчанию Popconfirm использует стандартные кнопки с текстом «OK» и «Cancel». Их можно изменить через свойства positive-text и negative-text:
<NPopconfirm
title="Сохранить изменения?"
positive-text="Да"
negative-text="Нет"
onPositiveCl ick={saveChanges}
onNegativeCl ick={discardChanges}
>
<NButton>Сохранить</NButton>
</NPopconfirm>
Можно также использовать кастомные кнопки через слоты:
<NPopconfirm>
<template #default>
<NButton>Удалить</NButton>
</template>
<template #footer>
<NButton type="error" @click="confirmDelete">Да, удалить</NButton>
<NButton @click="cancelDelete">Отмена</NButton>
</template>
</NPopconfirm>
Popconfirm поддерживает контролируемую видимость
через v-model:show:
<NPopconfirm
v-model:show="showConfirm"
title="Удалить файл?"
@positive-click="handleDelete"
>
<NButton @click="showConfirm = true">Удалить</NButton>
</NPopconfirm>
showConfirm — булевое состояние видимости
Popconfirm.Popconfirm использует встроенный механизм позиционирования, основанный на Popper.js. Основное свойство:
top, top-start, top-end, bottom, bottom-start, bottom-end,
left, left-start, left-end, right, right-start, right-end
Пример:
<NPopconfirm
placement="bottom-end"
title="Удалить этот элемент?"
>
<NButton>Удалить</NButton>
</NPopconfirm>
Popconfirm может содержать сложный контент, включая формы или динамические данные:
<NPopconfirm>
<template #default>
<NButton>Подтвердить действия</NButton>
</template>
<template #content>
<div>
<p>Выберите опцию для подтверждения:</p>
<NSelect :options="options" v-model:value="selectedOption" />
</div>
</template>
</NPopconfirm>
Popconfirm наследует глобальные стили Naive UI, но можно настраивать локально через CSS-переменные или классы:
.custom-popconfirm {
--n-popconfirm-color: #ffffff;
--n-popconfirm-border-radius: 8px;
}
Применение класса:
<NPopconfirm class="custom-popconfirm" title="Удалить элемент?">
<NButton>Удалить</NButton>
</NPopconfirm>
Также поддерживается анимация появления и скрытия через стандартные transition компоненты Vue.
Popconfirm часто используется совместно с кнопками (NButton) и списками (NDataTable, NList), чтобы добавлять защиту для критических действий. Пример с таблицей:
<NDataTable :columns="columns" :data="data">
<template #action="{ row }">
<NPopconfirm
title="Вы уверены, что хотите удалить этот ряд?"
@positive-click="() => deleteRow(row.id)"
>
<NButton size="small" type="error">Удалить</NButton>
</NPopconfirm>
</template>
</NDataTable>
Popconfirm в Naive UI сочетает простоту интеграции с гибкой кастомизацией, позволяя управлять как внешним видом, так и поведением всплывающих подтверждений в сложных интерфейсах.