Skip to content

Popup 弹出层

介绍

弹出层容器,用于展示弹窗、信息提示等内容,支持多个弹出层叠加展示。

基础用法

通过 v-model 控制弹出层是否展示。

html
<vd-cell title="展示弹出层" is-link @click="show = true" />

<vd-popup v-model="show">
  <view class="box" style="padding: 60px;"></view>
</vd-popup>
ts
const show = ref(false);

函数调用

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

open / showPopup 返回 Promise,在 beforeClose 放行关闭时 resolve 当前 data(与 Dialog 一致);返回 false / 抛错则不 resolve、不关闭。需接收 config 请使用 content 插槽(小程序 default 无法传参)。

WARNING

因小程序无法动态挂载组件,使用时需要页面存在一个 Popup 组件。

html
<vd-popup name="page" position="center" round closeable>
  <view class="text-box">弹出层内容</view>
</vd-popup>
ts
import { showPopup, showToast } from 'vital-design';

await showPopup({ name: 'page' });

showToast({ message: '已关闭' });

弹出位置

通过 position 属性控制弹出层的位置。

html
<!-- 顶部弹出 -->
<vd-popup v-model="show" position="top"></vd-popup>

<!-- 底部弹出 -->
<vd-popup v-model="show" position="bottom"></vd-popup>

<!-- 左侧弹出 -->
<vd-popup v-model="show" position="left"></vd-popup>

<!-- 右侧弹出 -->
<vd-popup v-model="show" position="right"></vd-popup>

圆角弹窗

设置 round 属性后,弹窗会根据弹出位置添加不同的圆角样式。

html
<!-- 中间弹出 -->
<vd-popup v-model="show" round></vd-popup>

<!-- 底部弹出 -->
<vd-popup v-model="show" position="bottom" round></vd-popup>

关闭按钮

通过 closeable 属性控制是否显示关闭按钮。

html
<vd-popup v-model="show" closeable></vd-popup>

<!-- 上左侧展示关闭按钮 -->
<vd-popup v-model="show" closeable close-position="top-left"></vd-popup>

展示标题

通过 title 属性设置弹出层的标题。

html
<vd-popup v-model="show" title="标题"></vd-popup>

<!-- 中间展示标题 -->
<vd-popup v-model="show" title="标题" title-align="center"></vd-popup>

弹出动画

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

html
<vd-popup v-model="show" transition="zoom-in"></vd-popup>

禁用遮罩点击关闭

通过 close-on-click-overlay 属性设置是否禁用遮罩点击关闭弹层。

html
<vd-popup v-model="show" :close-on-click-overlay="false"></vd-popup>

禁用遮罩

通过 overlay 属性设置是否禁用遮罩。

html
<vd-popup v-model="show" :overlay="false"></vd-popup>

API

Props

参数说明类型默认值
name标识名称,用于函数式调用string | number-
data传递给插槽的数据object-
v-model是否展示booleanfalse
round是否显示圆角booleanfalse
position弹出位置PopupPosition'center'
transition动画名称TransitionName'fade'
title标题string-
title-align标题位置PopupTitleAlign'left'
closeable是否显示关闭按钮booleanfalse
close-icon关闭按钮图标IconsName'close'
close-position关闭按钮位置PopupClosePosition'top-right'
before-close关闭前的回调,入参为当前 data;支持 Promise;返回 false 或抛错阻止关闭PopupBeforeClose-
close-on-click-overlay是否点击遮罩关闭booleantrue
overlay是否显示遮罩booleantrue
overlay-class遮罩类名ClassValue-
overlay-style遮罩样式StyleValue-
z-index层级number2001+
lazy-render是否懒渲染booleantrue
cacheable是否缓存节点,缓存节点后,切换展示状态时不会重新渲染节点booleantrue
lock-scroll是否锁定背景booleantrue

代替原始 Props

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

Events

事件名说明回调参数
click点击时触发MouseEvent
update:model-value展示状态更新时触发boolean
open打开时触发-
opened打开动画结束时触发-
close关闭时触发-
closed关闭动画结束时触发-
click-close点击关闭按钮时触发MouseEvent
click-overlay点击遮罩时触发MouseEvent

Methods

通过 ref 可调用以下方法,函数式请优先使用 showPopup / closePopup / usePopup

方法名说明参数返回值
open打开弹出层;beforeClose 放行后 resolve 当前 dataPopupOpenOption<T>Promise<T>
close关闭弹出层--

Slots

名称说明参数
default自定义整体内容-
content自定义内容区{ config }
title标题{ config }
close关闭按钮{ config }

类型定义

组件导出以下类型定义:

ts
import type {
  PopupProps,
  PopupEmits,
  PopupExpose,
  PopupInstance,
  PopupOpenOption,
  PopupBeforeClose,
  PopupPosition,
  PopupTitleAlign,
  PopupClosePosition,
} from 'vital-design';

import {
  showPopup,
  closePopup,
  usePopup,
} from 'vital-design';

赣ICP备2025061025号-1