在uni-app中IOS使用uni.relaunch跳转页面在目标页面的onshow中打印当前页堆栈不是1
在uni-app中IOS使用uni.relaunch跳转页面在目标页面的onshow中打印当前页堆栈不是1
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:win10
手机系统:iOS
手机系统版本号:iOS 18
手机厂商:苹果
手机机型:iphone12mini
页面类型:vue
vue版本:vue3
打包方式:离线
项目创建方式:CLI
CLI版本号:5.0.8
操作步骤: A页面:
uni.navigateTo({url:'B'})
B页面:
uni.navigateTo({url:'C'})
C页面
uni.relaunch({url:'D'})
D页面:
onshow(() => {
const pages = getCurrentPages()
console.log(pages.length)
})
预期结果:
期望console.log中打印得到页面堆栈长度是1
实际结果:
实际console.log中打印得到页面堆栈长度是4
更多关于在uni-app中IOS使用uni.relaunch跳转页面在目标页面的onshow中打印当前页堆栈不是1的实战教程也可以访问 https://www.itying.com/category-93-b0.html
它 好像 不是 立刻 就 销毁 其他 页面的,
你可以加个 setTimeout 试试看 , 延迟个 1秒啥的, 应该 长度 就是1了,
我是在 url 加上了 标志位, 标志 是否是 reLaunch ,
uni.reLaunch({
url: “/pages/dxd/dxd?reLaunch=1”
})
更多关于在uni-app中IOS使用uni.relaunch跳转页面在目标页面的onshow中打印当前页堆栈不是1的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在uni-app中,iOS平台使用uni.relaunch
跳转时出现页面堆栈未重置的问题,这是因为iOS平台的实现机制导致的。relaunch
本应关闭所有页面并打开新页面,但在iOS上可能存在堆栈未完全清除的情况。
解决方案:
- 使用
setTimeout
延迟获取页面堆栈:
onShow(() => {
setTimeout(() => {
const pages = getCurrentPages()
console.log(pages.length) // 此时应该为1
}, 100)
})
- 或者使用
uni.reLaunch
替代(注意大小写):
uni.reLaunch({url: 'D'})
- 也可以在D页面的
onLoad
生命周期中获取堆栈:
onLoad(() => {
const pages = getCurrentPages()
console.log(pages.length)
})
这个问题主要是iOS平台实现上的差异,建议使用上述方法之一来解决。如果仍有问题,可以考虑在跳转前手动关闭所有页面:
// 在C页面
const pages = getCurrentPages()
pages.forEach(page => {
if (page.route !== 'pages/C/C') {
uni.navigateBack({delta: 1})
}
})
setTimeout(() => {
uni.reLaunch({url: 'D'})
}, 300)