yyyttt
yyyttt
  • 发布:2022-12-09 18:00
  • 更新:2024-06-21 15:13
  • 阅读:972

【报Bug】app端使用uni.addInterceptor('switchTab', {})拦截问题

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 12.6

HBuilderX类型: 正式

HBuilderX版本号: 3.6.5

手机系统: Android

手机系统版本号: Android 10

手机厂商: 小米

手机机型: mix4

页面类型: nvue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

使用示例代码

预期结果:

return false 不跳转也不改变选中状态

实际结果:

return false 不跳转,改变了选中状态

bug描述:

uni.addInterceptor('switchTab', {
invoke(e) {
return false
}
})

return false 之后虽然没有跳转,但选中状态会改变

2022-12-09 18:00 负责人:无 分享
已邀请:
2***@qq.com

2***@qq.com

安卓可以这样试试:interceptBack() {
const tabPages = ['/pages/card/card', '/pages/me/me', '/pages/wallet/wallet', '/pages/transaction/transaction'];
uni.addInterceptor('navigateBack', {
invoke: (e) => {
// 1 获取页面栈
const pages = getCurrentPages();
const len = pages?.length;
// 2 判断长度
if (len !== 2) return true;
// // 3 判断最后一个页面是否为登录页面
if (pages[1].$page.fullPath != '/pages/login/login') return true;
// // 4 兼容跳转至上个 tab 页面,APP端需要兼容 tabbar 的活跃图标异常
const routeName = pages[0].$page.fullPath;
// // 5 判断是否为 tabbar 页面
if (!tabPages.includes(routeName)) return true;
// // 6 跳转回原 tab 页
uni.switchTab({
url: routeName
});
return true;
}
});
}

9***@qq.com

9***@qq.com

我也遇到这个问题,按照作者提供的“暂时的处理是 再重新调用一次switchTab 切回之前的tabbarItem”实现了一遍,确实可以临时解决这个问题.

后来同事提出另一个思路,假设TabA切换TabB,TabB做了拦截(其实是没有进入到TabB的),返回TabA的时候,在TabA执行

uni.switchTab({
url:'TabA URL'
})
简单来说就是自己switchTab自己
本来我以为会陷入页面无限死循环,结果发现并没有哎,
这样就解决了?虽然我知道这样做存在风险,但是是目前最简单的解决方式.

呆狗的一生

呆狗的一生 - 呆狗的一生

确实是这样

1***@qq.com

1***@qq.com

有解吗?

  • yyyttt (作者)

    暂时的处理是 再重新调用一次switchTab 切回之前的tabbarItem

    2023-04-03 11:09

  • 1***@qq.com

    回复 yyyttt: 我是直接调用switchTab 返回主页面,页面也不会跳转。效果也是停留在原来页面。不过暂时也就这样子了。

    2023-04-20 11:30

翻滚吧牛欢喜

翻滚吧牛欢喜

也遇到同样问题,都2023年了还没解决这个问题么

BigHornet

BigHornet

同样遇到这个问题,请问有什么好的解决方案吗

要回复问题请先登录注册