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)
}
})
}

- 发布:2025-09-29 15:23
- 更新:2025-09-29 17:38
- 阅读:29
产品分类: uniapp/H5
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: 15.6.1 (24G90)
HBuilderX类型: Alpha
HBuilderX版本号: 4.81
浏览器平台: Chrome
浏览器版本: 140.0.7339.210
项目创建方式: HBuilderX
示例代码:
操作步骤:
将上述代码中的300改成100就出错,设置成300以上就不会出错。
将上述代码中的300改成100就出错,设置成300以上就不会出错。
预期结果:
在 complete 中redirectTo不报错。
在 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
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。

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