uni-app的uni-popup组件无法自动关闭

发布于 1周前 作者 vueper 来自 Uni-App

uni-app的uni-popup组件无法自动关闭

开发环境 版本号 项目创建方式
Windows win10 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.97

手机系统:Android

手机系统版本号:Android 13

手机厂商:OPPO

手机机型:vivoS12

页面类型:vue

vue版本:vue3

打包方式:云端

示例代码:

<uni-popup ref="popDel" :safe-area="false" class="uni-pop-content" type="bottom">
<uni-popup-dialog mode="base" title="确定要删除全部搜索记录吗?" content="此操作将清空所有搜索搜索历史" confirmText="确定" cancelText="取消"
@confirm="delHistory"></uni-popup-dialog>
</uni-popup>

操作步骤:

点击蒙版自动关闭但是没有自动关闭

预期结果:

点击蒙版希望自动关闭

实际结果:

蒙版没有自动关闭

bug描述:

uni-popup嵌套一个uni-popup-dialog 点击没法自动关闭弹窗


2 回复

在外面定义个click事件,点击后,this.$refs.popup.close()就行


uni-popupuni-app 框架中常用的弹窗组件,默认情况下,弹窗可以通过点击弹窗外部或使用 close 方法来关闭。如果你遇到 uni-popup 无法自动关闭的问题,可能是以下几个原因导致的:


1. 未正确调用 close 方法

uni-popup 需要通过调用 close 方法来关闭弹窗。如果你没有在代码中正确调用该方法,弹窗将不会关闭。

解决方法: 确保在需要关闭弹窗的地方调用 close 方法。例如:

// 获取 popup 实例
const popup = uni.getCurrentInstance().ctx.$refs.popup;

// 关闭弹窗
popup.close();

2. mask-click 事件未触发

uni-popup 默认支持点击遮罩层(mask)关闭弹窗。如果 mask-click 事件未触发,可能是以下原因:

  • 未开启 mask-click 功能。
  • 遮罩层被其他元素覆盖,导致事件无法触发。

解决方法: 确保在 uni-popup 组件中开启 mask-click 功能:

<uni-popup ref="popup" :mask-click="true">
  <!-- 弹窗内容 -->
</uni-popup>

如果遮罩层被其他元素覆盖,检查页面布局并调整层级。


3. uni-popuptype 设置问题

uni-popup 支持多种弹窗类型(如 centerbottomtop 等)。如果 type 设置不正确,可能会导致弹窗无法正常关闭。

解决方法: 检查 uni-popuptype 属性是否设置正确。例如:

<uni-popup ref="popup" type="center">
  <!-- 弹窗内容 -->
</uni-popup>

4. 弹窗内容阻止了事件冒泡

如果弹窗内容中有按钮或其他元素阻止了事件冒泡(例如使用了 stopPropagation),可能会导致 mask-click 事件无法触发。

解决方法: 检查弹窗内容中的事件处理逻辑,确保没有阻止事件冒泡。


5. 异步操作导致关闭延迟

如果在关闭弹窗前有异步操作(例如网络请求),可能会导致弹窗关闭延迟或失败。

解决方法: 确保在异步操作完成后调用 close 方法。例如:

async function closePopup() {
  // 模拟异步操作
  await someAsyncFunction();

  // 关闭弹窗
  const popup = uni.getCurrentInstance().ctx.$refs.popup;
  popup.close();
}

6. uni-popup 版本问题

如果使用的是旧版本的 uni-popup,可能存在一些已知的 Bug。

解决方法: 确保 uni-popup 是最新版本。可以通过以下命令更新:

npm install [@dcloudio](/user/dcloudio)/uni-ui --save
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!