uni-app errMsg: "setTabBarItem:fail not TabBar page"
uni-app errMsg: “setTabBarItem:fail not TabBar page”
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | macOS Big Sur 11.5.2 (20G95) | HBuilderX |
示例代码:
<template>
<view>
这是登录页
<button type="default" @click="toDoLogin">登录</button>
</view>
</template>
<script>
export default {
data() {
return {
onsite: ''
}
},
onLoad(event) {
if (event.onsite) {
this.onsite = event.onsite
}
},
methods: {
toDoLogin() {
if (this.onsite === 'L') {
uni.setTabBarItem({
index: 0,
text: '项目汇总',
iconPath: 'static/logo.png',
selectedIconPath: 'static/logo.png',
pagePath: 'pages/home/home',
success(info) {
console.log("设置成功,返回信息:", info)
uni.switchTab({
url: '/pages/home/home'
})
},
fail(err) {
console.log("设置失败,错误信息:", err)
}
})
} else {
uni.switchTab({
url: '/pages/index/index'
})
}
}
}
}
</script>
<style>
</style>
操作步骤:
HbuilderX打开项目,运行到浏览器Chrome后,url中添加参数?onsite=L,点击登录,查看控制台信息
预期结果:
动态设置第一个tabBar的路径及名称后成功跳转新页面
实际结果:
不走成功,调用uni.setTabBarItem方法触发失败函数,错误信息:errMsg: “setTabBarItem:fail not TabBar page”
bug描述:
业务逻辑,根据不同用户类型动态设置tabBar第一个的路径及名称
实现步骤:
- 登录接口返回onsite
- onsite 为L时,动态设置第一个tabBar的路径及名称
- 动态设置成功后跳转对应新的首页
BUG:
调用uni.setTabBarItem失败,同时测试调用所有设置 tabBar的方法都是失败
调用失败信息:
errMsg: “setTabBarItem:fail not TabBar page”
更多关于uni-app errMsg: "setTabBarItem:fail not TabBar page"的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我在app非tabbar页面调用也有这问题唉
大佬 你这个解决了吗
setTabBarItem方法 只能在tabbar页面调用
则么解决,在线等
已排查出问题:并不是uniapp的问题,而是微信小程序并不支持在非tabBar页面调用该方法
具体可参考
微信官方回答
楼主说的是 uni.setTabBarItem 方法,不是 setTabBarBadge 方法
现在有解决办法了嘛?
为什么到现在还是这个问题 就不能出一个兼容的办法嘛?
我在H5端也遇到了
这个错误是因为你在非 TabBar 页面调用了 uni.setTabBarItem 方法。从你的代码来看,登录页(login)本身不是 TabBar 页面,但你在其中尝试修改 TabBar 的配置。
问题分析:
uni.setTabBarItem方法只能在 TabBar 页面中调用- 你的登录页没有在
pages.json的tabBar配置中声明为 TabBar 页面 - 在 H5 环境下,TabBar 相关 API 有更严格的限制
解决方案:
将 TabBar 配置的逻辑移到 TabBar 页面中执行,比如在第一个 TabBar 页面的 onLoad 或 onShow 生命周期中:
// 在 home 页面(第一个 TabBar 页面)中
onLoad() {
const onsite = uni.getStorageSync('onsite');
if (onsite === 'L') {
uni.setTabBarItem({
index: 0,
text: '项目汇总',
iconPath: 'static/logo.png',
selectedIconPath: 'static/logo.png'
});
}
}
修改你的登录逻辑:
toDoLogin() {
if (this.onsite === 'L') {
// 先存储 onsite 标识
uni.setStorageSync('onsite', 'L');
// 直接跳转到 TabBar 页面
uni.switchTab({
url: '/pages/home/home'
});
} else {
uni.switchTab({
url: '/pages/index/index'
});
}
}



