警报对话框
功能
- 焦点自动锁定。
- 可受控或不受控。
- 通过
Title和Description组件管理屏幕阅读器公告。 - 按 Esc 键自动关闭组件。
安装
从命令行安装此组件。
$ npm add reka-ui结构
导入所有部分并将其组合。
<script setup lang="ts">
import {
AlertDialogAction,
AlertDialogCancel,
AlertDialogContent,
AlertDialogDescription,
AlertDialogOverlay,
AlertDialogPortal,
AlertDialogRoot,
AlertDialogTitle,
AlertDialogTrigger,
} from 'reka-ui'
</script>
<template>
<AlertDialogRoot>
<AlertDialogTrigger />
<AlertDialogPortal>
<AlertDialogOverlay />
<AlertDialogContent>
<AlertDialogTitle />
<AlertDialogDescription />
<AlertDialogCancel />
<AlertDialogAction />
</AlertDialogContent>
</AlertDialogPortal>
</AlertDialogRoot>
</template>API 参考
根
包含警报对话框的所有部分。
| 属性 | 默认 | 类型 |
|---|---|---|
defaultOpen | 布尔值对话框初始渲染时的打开状态。当您不需要控制其打开状态时使用。 | |
open | 布尔值对话框的受控打开状态。可以绑定为 |
| 事件触发 | 载荷 |
|---|---|
update:open | [value: boolean]当对话框的打开状态改变时调用的事件处理程序。 |
| 插槽(默认) | 载荷 |
|---|---|
open | 布尔值当前打开状态 |
close | (): void关闭对话框 |
触发器
一个打开对话框的按钮。
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'button' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 |
| 数据属性 | 值 |
|---|---|
[data-state] | "打开" | "关闭" |
传送门
使用时,将您的覆盖层和内容部分传送到 body 元素中。
| 属性 | 默认 | 类型 |
|---|---|---|
defer | 布尔值延迟解析 Teleport 目标,直到应用程序的其他部分挂载(需要 Vue 3.5.0+) | |
disabled | 布尔值禁用传送并内联渲染组件 | |
forceMount | 布尔值当需要更多控制时,用于强制挂载。在与 Vue 动画库控制动画时很有用。 | |
to | 字符串 | HTMLElementVue 原生传送组件属性 |
覆盖层
当对话框打开时,覆盖视图中非交互部分的层。
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'div' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 | |
forceMount | 布尔值当需要更多控制时,用于强制挂载。在与 Vue 动画库控制动画时很有用。 |
| 数据属性 | 值 |
|---|---|
[data-state] | "打开" | "关闭" |
内容
包含对话框打开时要渲染的内容。
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'div' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 | |
disableOutsidePointerEvents | 布尔值当设置为 | |
forceMount | 布尔值当需要更多控制时,用于强制挂载。在与 Vue 动画库控制动画时很有用。 |
| 事件触发 | 载荷 |
|---|---|
closeAutoFocus | [事件: Event]关闭时自动聚焦调用的事件处理程序。可阻止其默认行为。 |
escapeKeyDown | [事件: KeyboardEvent]按下 Esc 键时调用的事件处理程序。可阻止其默认行为。 |
focusOutside | [事件: FocusOutsideEvent]当焦点移出 |
interactOutside | [事件: PointerDownOutsideEvent | FocusOutsideEvent]当 |
openAutoFocus | [事件: Event]打开时自动聚焦调用的事件处理程序。可阻止其默认行为。 |
pointerDownOutside | [事件: PointerDownOutsideEvent]当 |
| 数据属性 | 值 |
|---|---|
[data-state] | "打开" | "关闭" |
取消
一个关闭对话框的按钮。此按钮在视觉上应与 AlertDialogAction 按钮区分开来。
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'button' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 |
操作
一个关闭对话框的按钮。这些按钮在视觉上应与 AlertDialogCancel 按钮区分开来。
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'button' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 |
标题
对话框打开时将宣布的可访问名称。或者,您可以为 AlertDialogContent 提供 aria-label 或 aria-labelledby 并排除此组件。
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'h2' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 |
描述
对话框打开时将宣布的可访问描述。或者,您可以为 AlertDialogContent 提供 aria-describedby 并排除此组件。
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'p' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 |
示例
异步表单提交后关闭
使用受控属性在异步操作完成后以编程方式关闭警报对话框。
<script setup>
import {
AlertDialogAction,
AlertDialogCancel,
AlertDialogContent,
AlertDialogDescription,
AlertDialogOverlay,
AlertDialogPortal,
AlertDialogRoot,
AlertDialogTitle,
AlertDialogTrigger,
} from 'reka-ui'
const wait = () => new Promise(resolve => setTimeout(resolve, 1000))
const open = ref(false)
</script>
<template>
<AlertDialogRoot v-model:open="open">
<AlertDialogTrigger>Open</AlertDialogTrigger>
<AlertDialogPortal>
<AlertDialogOverlay />
<AlertDialogContent>
<form
@submit.prevent="
(event) => {
wait().then(() => open = false);
}
"
>
<!-- some inputs -->
<button type="submit">
Submit
</button>
</form>
</AlertDialogContent>
</AlertDialogPortal>
</AlertDialogRoot>
</template>自定义传送门容器
自定义警报对话框传送到的元素。
<script setup>
import { ref } from 'vue'
const container = ref(null)
</script>
<template>
<div>
<AlertDialogRoot>
<AlertDialogTrigger />
<AlertDialogPortal :to="container">
<AlertDialogOverlay />
<AlertDialogContent>...</AlertDialogContent>
</AlertDialogPortal>
</AlertDialogRoot>
<div ref="container" />
</div>
</template>可访问性
键盘交互
| 键 | 描述 |
|---|---|
空格键 | 打开/关闭对话框。 |
回车键 | 打开/关闭对话框。 |
Tab | 将焦点移动到下一个可聚焦元素。 |
Shift + Tab | 将焦点移至上一个可聚焦元素。 |
Esc键 | 关闭对话框并将焦点移至 AlertDialogTrigger。 |
