Skip to content

弹出层管理(usePopup)

usePopup 是一个弹出层生命周期管理 Hook,管理打开/关闭状态和动画时序,支持异步 beforeClose 守卫。

此 API 源码:GitHub

使用方式

vue
<script setup>
import { ref } from 'vue'
import { usePopup } from 'see-u-ui'

const show = ref(false)
const beforeClose = ref(null)

const { isVisible, open, close, toggle } = usePopup({
  show,
  beforeClose,
  duration: 300,
  onOpen: () => console.log('打开'),
  onOpened: () => console.log('打开动画完成'),
  onClose: () => console.log('关闭'),
  onClosed: () => console.log('关闭动画完成'),
  onUpdateShow: (val) => { show.value = val }
})

// 支持 async/await
await open()
await close()
</script>

API

usePopup(options)

参数类型默认值说明
options.showRef<boolean>外部控制显示的响应式状态
options.beforeCloseRef<(() => boolean | Promise<boolean>) | null>undefined关闭前守卫,返回 false 阻止关闭
options.durationnumber300动画时长(ms)
options.onOpen() => voidundefined打开时回调
options.onOpened() => voidundefined打开动画完成后回调
options.onClose() => voidundefined关闭时回调
options.onClosed() => voidundefined关闭动画完成后回调
options.onUpdateShow(value: boolean) => voidundefinedv-model 双向同步回调

返回值:

属性/方法类型说明
isVisibleRef<boolean>内部可见状态
isAnimatingRef<boolean>是否正在动画中
open() => Promise<void>打开弹出层
close() => Promise<void>关闭弹出层(受 beforeClose 守卫)
toggle() => Promise<void>切换状态
cleanup() => void清理定时器

辽 ICP 备 2025070134 号