Skip to content

Dialog 弹出框

介绍

弹出模态框,常用于消息提示、消息确认,或在当前页面内完成特定的交互操作。

函数调用

为了便于使用 Dialog,提供了 showDialogcloseDialog 函数,用于显示和关闭 Dialog,可设置标识指定一个 Dialog 组件调用。

WARNING

因小程序无法动态挂载组件,使用时需要页面存在一个 Dialog 组件,且函数调用方法需要在 onLoad 生命周期后调用。

html
<vd-dialog name="page" />
ts
import { showDialog } from 'vital-design';

showDialog({
  title: '标题',
  message: '弹窗内容',
});

// 指定一个 Dialog 调用
showDialog({
  name: 'page',
  title: '标题',
  message: '提示内容',
});

卡片样式

通过 theme 属性设置样式主题,可选值为 defaultcard

html
<vd-dialog name="page" />
ts
import { showDialog } from 'vital-design';

showDialog({
  name: 'page',
  theme: 'card',
  title: '标题',
  message: '提示内容',
});

更换动画

通过 transition 属性设置弹窗的动画,动画名称参考 Transition 组件。

html
<vd-dialog name="page" />
ts
import { showDialog } from 'vital-design';

showDialog({
  name: 'page',
  transition: 'zoom-out',
  title: '标题',
  message: '提示内容',
});

异步关闭

函数式调用时,可通过 confirmcancel 配置操作函数,支持 Promise,通过返回 boolean 值来决定是否关闭。

html
<vd-dialog name="page" />
ts
// 函数式(方式1)
showDialog({
  title: '标题',
  message: '提示内容',
  showCancelButton: true,
  confirm: async () => {
    // 确认操作
  },
  cancel: async () => {
    // 取消操作
  },
});

// 函数式(方式2)
try {
  await showDialog({
    name: 'page',
    title: '标题',
    message: '提示内容',
    showCancelButton: true,
  });

  // 确认操作
} catch (error) {
  // 取消操作
}

关闭前操作

非函数式调用时,可通过 before-close 配置关闭前操作函数,支持 Promise,通过返回 boolean 值来决定是否关闭。

html
<vd-dialog
  v-model="show"
  title="标题"
  message="提示内容"
  show-cancel-button
  :before-close="beforeClose"
/>
ts
import { showToast } from 'vital-design';
import { timeout } from '@vital-design/shared';

// 非函数式
async function beforeClose(action: string) {
  // 确认操作
  if (action === 'confirm') {
    await timeout(1000); // 模拟请求

    if (Math.random() > 0.5) {
      return true; // 模拟成功
    }

    showToast('操作失败');
    return false; // 模拟失败
  }

  // 取消操作
  if (action === 'cancel') {
    ...
  }
}

单例使用

通过 v-model 控制弹窗是否展示,其他属性与函数式配置相同。

html
<vd-dialog
  v-model="show"
  title="标题"
  message="提示内容"
  show-cancel-button
/>
ts
const show = ref(false);

API

Props

参数说明类型默认值
v-model是否展示boolean-
name标识名称string'spinner'
theme弹窗主题'default' | 'card''default'
title标题string-
message内容string-
transition弹出动画TransitionName'zoom-in'
show-confirm-button是否展示确认按钮booleantrue
confirm-button-text确认按钮文案string-
show-cancel-button是否展示取消按钮booleanfalse
cancel-button-text取消按钮文案string-
before-close关闭前的回调函数,支持 PromiseDialogBeforeClose-
overlay是否显示遮罩booleantrue
overlay-class遮罩类名ClassValue-
overlay-style遮罩样式StyleValue-
close-on-click-overlay是否点击遮罩关闭booleantrue
z-index层级number2001+
lock-scroll是否锁定背景booleantrue

代替原始 Props

参数说明类型默认值
custom-id根节点idstring-
custom-class根节点类名ClassValue-
custom-style根节点样式StyleValue-

Events

事件名说明回调参数
click点击时触发MouseEvent
click-overlay点击遮罩时触发MouseEvent
confirm确认按钮操作-
cancel取消按钮操作-
open打开时触发-
opened打开动画结束时触发-
close关闭时触发-
closed关闭动画结束时触发-

Slots

名称说明
default自定义内容
title标题
content内容
footer底部内容
confirm确认按钮
cancel取消按钮

Expose

方法名说明参数返回值
open打开弹窗DialogOpenOption-
close关闭弹窗DialogActionType-

赣ICP备2025061025号-1