Skip to content

Dialog 对话框

弹出模态框,常用于消息提示、消息确认,或在当前页面内完成特定的交互操作。支持组件调用和函数调用两种方式。

函数调用-消息提示

为了便于使用 Dialog,Ryxon 提供了一系列辅助函数,通过辅助函数可以快速唤起全局的弹窗组件。

比如使用 showDialog 函数,调用后会直接在页面中渲染对应的弹出框。

函数调用-消息确认

消息类型

使用 VNode

使用 HTML 片段

自定义图标

间隔按钮风格

异步关闭

使用 Dialog 组件

API

方法

Ryxon 中导出了以下 Dialog 相关的辅助函数:

方法名说明参数返回值
showDialog展示弹窗options: DialogOptionsPromise<void>
showConfirmDialog展示消息确认弹窗options: DialogOptionsPromise<void>
closeDialog关闭弹窗-void
setDialogDefaultOptions修改默认配置,影响所有的 showDialog 调用options: DialogOptionsvoid
resetDialogDefaultOptions重置默认配置,影响所有的 showDialog 调用-void

DialogOptions

调用 showDialog 等方法时,支持传入以下选项:

参数说明类型默认值
title标题string-
theme样式风格,可选值为 space-buttonstringdefault
width弹窗宽度,默认单位为 pxnumber | string320px
position弹窗位置,可以top,使用top,--r-dialog-margin-top将失效stringcenter
message文本内容,支持通过 \n 换行string | VNode | () => VNode-
type弹窗类型,用于图标显示,可选success / info / warning / dangerstring-
icon自定义图标组件,会覆盖 type 的类型string / Component-
allowHtml是否允许 message 内容中渲染 HTMLbooleanfalse
className自定义类名string | Array | object-
transition动画类名,等价于 transitionname 属性string-
messageAlign内容对齐方式,可选值为 left rightstringcenter
closeOnPopstate是否在页面回退时自动关闭booleantrue
showConfirmButton是否展示确认按钮booleantrue
confirmButtonText确认按钮文案string确认
confirmButtonColor确认按钮颜色string#ee0a24
confirmButtonDisabled是否禁用确认按钮booleanfalse
showCancelButton是否展示取消按钮booleanfalse
cancelButtonText取消按钮文案string取消
cancelButtonColor取消按钮颜色stringblack
cancelButtonDisabled是否禁用取消按钮booleanfalse
closeOnClickOverlay是否在点击遮罩层后关闭弹窗booleanfalse
showClose是否显示右上角关闭按钮booleantrue
showFooter是否显示底部按钮booleantrue
callback关闭后的回调function-
overlay是否展示遮罩层booleantrue
overlayClass自定义遮罩层类名string | Array | object-
overlayStyle自定义遮罩层样式object-
lockScroll是否锁定背景滚动booleantrue
beforeClose关闭前的回调函数,返回 false 可阻止关闭,支持返回 Promise(action: string) => boolean | Promise\<boolean\>-
teleport指定挂载的节点,等同于 Teleport 组件的 to 属性string | Elementbody
keyboardEnabled是否启用键盘能力,在展示确认和取消按钮的时候,默认情况下键盘的 EnterEsc 会执行 confirmcancel 函数booleantrue
destroyOnClose当弹窗关闭时,销毁其中的元素booleanfalse

Props

通过组件调用 Dialog 时,支持以下 Props:

参数说明类型默认值
v-model:show是否显示弹窗boolean-
title标题string-
theme样式风格,可选值为 space-buttonstringdefault
width弹窗宽度,默认单位为 pxnumber | string320px
position弹窗位置,可以top,使用top,--r-dialog-margin-top将失效stringcenter
message文本内容,支持通过 \n 换行string | () => JSX.Element-
type弹窗类型,用于图标显示,可选success / info / warning / dangerstring-
icon自定义图标组件,会覆盖 type 的类型string / Component-
allow-html是否允许 message 内容中渲染 HTMLbooleanfalse
class-name自定义类名string | Array | object-
transition动画类名,等价于 transitionname 属性string-
message-align内容水平对齐方式,可选值为 left right justifystringcenter
close-on-popstate是否在页面回退时自动关闭booleantrue
show-confirm-button是否展示确认按钮booleantrue
confirm-button-text确认按钮文案string确认
confirm-button-color确认按钮颜色string#ee0a24
confirm-button-disabled是否禁用确认按钮booleanfalse
show-cancel-button是否展示取消按钮booleanfalse
cancel-button-text取消按钮文案string取消
cancel-button-color取消按钮颜色stringblack
cancel-button-disabled是否禁用取消按钮booleanfalse
close-on-click-overlay是否在点击遮罩层后关闭弹窗booleanfalse
show-close是否显示右上角关闭按钮booleantrue
show-footer是否显示底部按钮booleantrue
callback关闭后的回调function-
z-index将弹窗的 z-index 层级设置为一个固定值number | string2000+
overlay是否展示遮罩层booleantrue
overlay-class自定义遮罩层类名string-
overlay-style自定义遮罩层样式object-
lazy-render是否在显示弹层时才渲染节点booleantrue
lock-scroll是否锁定背景滚动booleantrue
before-close关闭前的回调函数,返回 false 可阻止关闭,支持返回 Promise(action: string) => boolean | Promise\<boolean\>-
teleport指定挂载的节点,等同于 Teleport 组件的 to 属性string | Element-
keyboard-enabled是否启用键盘能力,在展示确认和取消按钮的时候,默认情况下键盘的 EnterEsc 会执行 confirmcancel 函数booleantrue
destroy-on-close当弹窗关闭时,销毁其中的元素booleanfalse

Events

通过组件调用 Dialog 时,支持以下事件:

事件名说明回调参数
confirm点击确认按钮时触发-
cancel点击取消按钮时触发-
open打开弹窗时触发-
close关闭弹窗时触发-
opened打开弹窗且动画结束后触发-
closed关闭弹窗且动画结束后触发-

Slots

通过组件调用 Dialog 时,支持以下插槽:

名称说明
default自定义内容
title自定义标题
footer自定义底部按钮区域

类型定义

组件导出以下类型定义:

ts
import type {
  DialogProps,
  DialogTheme,
  DialogMessage,
  DialogOptions,
  DialogMessageAlign
} from 'ryxon'

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件

名称默认值描述
--r-dialog-width320px-
--r-dialog-small-screen-width90%-
--r-dialog-font-sizevar(--r-font-size-lg)-
--r-dialog-transitionvar(--r-duration-base)-
--r-dialog-radius4px-
--r-dialog-backgroundvar(--r-background-2)-
--r-dialog-header-font-weightvar(--r-font-bold)-
--r-dialog-header-line-height21px-
--r-dialog-header-padding-top26px-
--r-dialog-header-isolated-paddingvar(--r-padding-lg) 0-
--r-dialog-header-backgroundvar(--r-background)-
--r-dialog-message-paddingvar(--r-padding-lg)-
--r-dialog-message-font-sizevar(--r-font-size-md)-
--r-dialog-message-line-heightvar(--r-line-height-md)-
--r-dialog-message-max-height60vh-
--r-dialog-has-title-message-text-colorvar(--r-gray-7)-
--r-dialog-has-title-message-padding-top0-
--r-dialog-button-height48px-
--r-dialog-button-space12px-
--r-dialog-button-radius4px-
--r-dialog-space-button-height40px-
--r-dialog-confirm-button-text-colorvar(--r-primary-color)-
--r-dialog-padding-primary15px-
--r-dialog-margin-top15vh-
--r-dialog-close-font-size20px-

常见问题

引用 showDialog 时出现编译报错?

如果引用 showDialog 方法时出现以下报错,说明项目中使用了 babel-plugin-import 插件,导致代码被错误编译。

bash
These dependencies were not found:

* ryxon/es/show-dialog in ./src/xxx.js
* ryxon/es/show-dialog/style in ./src/xxx.js

Ryxon 不支持 babel-plugin-import 插件,请参考 快速开始 移除该插件。

在 beforeRouteLeave 里调用 Dialog 无法展示?

closeOnPopstate 属性设置为 false 即可。

js
import { showDialog } from 'ryxon'

showDialog({
  title: '标题',
  message: '弹窗内容',
  closeOnPopstate: false
}).then(() => {
  // on close
})

Released under the MIT License.