uni-app 返回上两次页面异常
uni-app 返回上两次页面异常
A -> B -> C -> D -> 返回B (需求效果)
A -> B -> C -> D -> 返回A (实际效果)
页面a 进入 页面b 进入 页面c 进入 页面d,在通过uni.navigateBack({delta: 2}) 返回页面b 时,
在已知浏览器(UC浏览器、夸克浏览器)中,测试发现实际效果是返回到页面a 而非页面b,其它浏览器暂时正常
通过调用 getCurrentPages() 页面栈发现,页面栈的存储数据是正常的
不用这么麻烦 直接在C页面 跳转D页面的时候 使用uni.redirectTo(D页面)这样C页面就消失了 D页面默认就能返回到B页面
更多关于uni-app 返回上两次页面异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
业务需求,C页面不能清除
回复 d***@163.com: 好吧 如果uni.navigateBack({delta: 2}) 在(UC浏览器、夸克浏览器)中会返回到A页面 那uni.navigateBack({delta: 1}) 会返回到那个页面?
回复 爱豆豆: 在页面d 中调用 uni.navigateBack({delta: 1}) 会回到 页面C,这个是正常的
回复 d***@163.com: 那估计是浏览器问题吧delta: 1就能正常返回 delta: 2就不行
都2024年了,这个bug还没修吗
解决了吗?
这个问题可能是由于某些浏览器对uni.navigateBack的delta参数处理存在兼容性问题导致的。建议尝试以下解决方案:
- 使用页面栈手动控制返回:
const pages = getCurrentPages();
uni.navigateBack({
delta: pages.length - pages.findIndex(page => page.route === 'pages/b/b') - 1
});
- 或者分两次返回:
uni.navigateBack({delta: 1});
setTimeout(() => {
uni.navigateBack({delta: 1});
}, 100);
- 也可以考虑使用reLaunch方式:
uni.reLaunch({
url: '/pages/b/b'
});