Skip to content

弹窗 useDialog

更新: 2025/1/20 字数: 0 字 时长: 0 分钟

基础使用

useDialog 是一个用于创建 vant 弹窗组件的 Composition API 二次封装。

打开基础弹窗

openDialog 函数,传入相应参数,展示一个基础弹窗。

ts
import useDialog from "@/hooks/useDialog";
const { openDialog } = useDialog();
点击查看示例代码
html
<van-button @click="openDialog('提示', '这是一段提示')"> 提示弹窗 </van-button>
<van-button @click="openDialog('', '这是一段提示')">
  提示弹窗(无标题)
</van-button>

打开确认弹窗

confirmDialog 函数,传入相应参数,展示一个用于确认消息的弹窗,默认包含确认和取消按钮。

ts
import useDialog from "@/hooks/useDialog";
const { confirmDialog } = useDialog();
点击查看示例代码
html
<van-button @click="confirmDialog('标题', '这是一段确认信息')">
  确认弹窗
</van-button>

自定义api弹窗

TIP

addDialog 函数,传入相应参数,展示一个用于确认消息的弹窗,默认包含确认和取消按钮。也可以引入ReDialog组件

ts
import { addDialog } from "@/components/Dialog";
function onModalClick() {
  addDialog({
    headerRenderer: () => h("p", null, "弹框头部-自定义"),
    contentRenderer: () => h("p", "弹框内容-弹窗api式调用"),
  });
}
点击查看示例代码
html
<van-button @click="onModalClick()"> 自定义api弹窗 </van-button>

API

返回值、方法

返回值、方法说明类型
openDialog展示消息提示弹窗,默认包含确认按钮(title: string, message?: DialogMessage, params?: DialogOptions) => Promise<unknown>
confirmDialog展示消息确认弹窗,默认包含确认和取消按钮(title: string, message?: DialogMessage, params?: DialogOptions) => Promise<unknown>
closeAllDialog关闭消息弹窗() => void

openDialog 详解

它接收三个参数,如下

参数名说明类型
title标题string
message文本内容,支持通过 \n 换行DialogMessage
params弹窗的配置参数,见下表DialogOptions

类型声明

ts
import type { CSSProperties, TeleportProps } from "vue";
type DialogMessage = string | (() => JSX.Element);
type DialogTheme = "default" | "round-button";
type DialogMessageAlign = "left" | "center" | "right" | "justify";
type DialogOptions = {
  /** 标题内容 */
  title?: string;
  /** 弹窗宽度,默认单位px,默认值320px */
  width?: string | number;
  /** 内容对齐方式,可选值为 left right,默认center */
  messageAlign?: DialogMessageAlign;
  /** 样式风格,可选值为 round-button,默认default */
  theme?: DialogTheme;
  /** 自定义类名 */
  className?: string | Array<string> | object;
  /** 是否展示确认按钮,默认true */
  showConfirmButton?: boolean;
  /** 是否展示取消按钮,默认false */
  showCancelButton?: boolean;
  /** 确认按钮文案,默认 确认 */
  confirmButtonText?: string;
  /** 确认按钮颜色,默认#ee0a24 */
  confirmButtonColor?: string;
  /** 是否禁用确认按钮,默认false */
  confirmButtonDisabled?: boolean;
  /** 取消按钮文案,默认 取消 */
  cancelButtonText?: string;
  /** 取消按钮颜色,默认black */
  cancelButtonColor?: string;
  /** 是否禁用取消按钮,默认false */
  cancelButtonDisabled?: boolean;
  /** 是否展示遮罩层,默认true */
  overlay?: boolean;
  /** 自定义遮罩层类名 */
  overlayClass?: string;
  /** 自定义遮罩层样式, */
  overlayStyle?: CSSProperties;
  /** 是否在页面回退时自动关闭,默认true */
  closeOnPopstate?: boolean;
  /** 是否在点击遮罩层后关闭弹窗,默认false */
  closeOnClickOverlay?: boolean;
  /** 是否允许 message 内容中渲染 HTML,默认false */
  allowHtml?: boolean;
  /** 是否锁定背景滚动,默认true */
  lockScroll?: boolean;
  /** 动画类名,等价于 transition 的 name 属性 */
  transition?: string;
  /** 关闭前的回调函数,返回 false 可阻止关闭,支持返回 Promise */
  beforeClose?: (
    action: string,
  ) => Promise<boolean> | boolean | undefined | void;
  /** 指定挂载的节点,等同于 Teleport 组件的 to 属性 */
  teleport?: TeleportProps["to"];
};

Released under the MIT License.

本站访客数 人次 本站总访问量