m***@126.com
m***@126.com
  • 发布:2025-09-29 15:23
  • 更新:2025-09-29 17:38
  • 阅读:29

【报Bug】showModal和redirectTo一起用会报错

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 15.6.1 (24G90)

HBuilderX类型: Alpha

HBuilderX版本号: 4.81

浏览器平台: Chrome

浏览器版本: 140.0.7339.210

项目创建方式: HBuilderX

示例代码:
const handleClose = () => {  
        uni.showModal({  
            title: ' 退出提示',  
            content: '是否保存本次记录?',  
            cancelText: '不保存',  
            confirmText: '保存',  
            confirmColor: theme.primary as string,  
            complete: (res) => {  
                setTimeout(() => {  
                    if (res.confirm) {  
                        saveCbtRecordStore().then(() => {  
                            uni.redirectTo({  
                                url: '/pages/cbt/list'  
                            })  
                        })  
                    } else {  
                        uni.redirectTo({  
                            url: '/pages/index/index'  
                        })  
                    }  
                }, 100)  
            }  
        })  
    }

操作步骤:

将上述代码中的300改成100就出错,设置成300以上就不会出错。

预期结果:

在 complete 中redirectTo不报错。

实际结果:
Uncaught TypeError: Cannot read properties of null (reading '$pageLayoutInstance')  
    at Module.closeDialogPage (uni-h5.es.js:8537:53)  
    at uni-h5.es.js:30005:13

bug描述:

我是这么理解这个问题的:showModal的关闭时会有一个动画,这个动画不是在complete调用前结束的。

所以如果我在complete中使用redirectTo,会将窗口实例销毁,导致showModal销毁时找不到窗口实例。

解决办法是showModal销毁后,再调用complete。

2025-09-29 15:23 负责人:无 分享
已邀请:
DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

找到 HBuilderX 或者 cli 依赖路径,解压我提供的压缩包进行替换即可。

HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5/dist-x


提供复现工程。我使用 HBuilderX4.81 + vue3+ uniapp + chrome 运行下面代码表现正常,正常跳转,控制台无报错

<template>  
  <view>  
    <button @click="handleClose">go</button>  
  </view>  
</template>  

<script setup lang="ts">  
  const handleClose = () => {  
    uni.showModal({  
      title: ' 退出提示',  
      content: '是否保存本次记录?',  
      cancelText: '不保存',  
      confirmText: '保存',  
      complete: (res) => {  
        uni.redirectTo({  
          url: '/pages/me/me'  
        })  
      }  
    })  
  }  
</script>
  • DCloud_UNI_OttoJi

    你是 uniappx 是吧?x-web 复现了此问题,后续提 bug 请明确 uniapp x

    2025-09-29 17:21

要回复问题请先登录注册