小程序
小游戏
企业微信
微信支付
扫描小程序码分享
在当前页为非tabbar页面时 调用wx.setTabBarBadge和wx.removeTabBarBadge会报错.
这是BUG还是就是这么设计的?
如果就这么设计的, 那么就不能通过worker线程来定时刷新TabBar状态了, 感觉这API就有点鸡肋了
11 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
目前是这么设计,可以缓存一下,tabBar页onShow的时候set上去
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
你认为这个设计好吗?
请问在IOS手机上,设置的内容会闪一下就消失了,在开发者工具上或者安卓上不会。为啥?
这样岂不是每个tabbar页onShow的时候都要判断一下,有计划改吗?
这个API设置真是邪门!
给你一个思路,全局App 定时刷新 消息,数量变化的时候,发送广播。所有tab页面 onLoad 时候 监听广播,onUnload 取消监听
// 注意:所有tab页面都需要绑定和解绑消息模块
// 说明:为何不全局app控制底部tab消息数量显示?因为当前页面非tab,操作底部数字显示会报错
// onLoad: message.addNotification()
// onUnload: message.removeNotification()
import {
getMessagerList
} from '../api/message.js'
const wxNotificationCenter = require('../utils/WxNotificationCenter.js')
const login = require('../utils/login.js')
let lastUnReadMessagerNum = 0
// 加载消息
const loadMsg = () => {
if (login.isLogin()) {
getMessagerList({
}).then((res) => {
// 获取第一条消息
let data = res.data
if (!data) {
return
}
// 统计未读消息数量
let unReadMessagerNum = 0;
data.forEach(item => {
if (item.isRead != true) {
unReadMessagerNum++;
});
if (lastUnReadMessagerNum != unReadMessagerNum) {
if (unReadMessagerNum) {
wx.setTabBarBadge({
index: 3,
text: unReadMessagerNum + "",
})
} else {
wx.removeTabBarBadge({
index: 3
// 触发广播
wxNotificationCenter.postNotificationName('messageChange', 3)
// 绑定广播监听
const addNotification = (moreFun) => {
wxNotificationCenter.addNotification('messageChange', (unReadMessagerNum) => {
lastUnReadMessagerNum = unReadMessagerNum
if (moreFun) {
moreFun(unReadMessagerNum)
}, this)
// 解绑广播监听
const removeNotification = () => {
wxNotificationCenter.removeNotification('messageChange')
module.exports = {
loadMsg: loadMsg,
addNotification: addNotification,
removeNotification: removeNotification
wx.setTabBarBadger报错? AA 📖『東』📚🍵 的评论 - 微信开放社区 https://developers.weixin.qq.com/community/develop/doc/0008c8ff0c0020783eb6d099e51c00?jumpto=reply&commentid=000442eeb300c0e26abb358c35bc&parent_commentid=00086ca9364d201b97b627b715ac
用这个试试
setTimeout(() => {
wx.removeTabBarBadge({ index: 2 })
}, 0)
应该是和原生交互的问题。
解决办法就是通过localstorage去存储状态,再回退到上个Tab页面的时候,会调用onShow()方法,在onShow 和全局app.js里面的onshow。一起异步操作TabBar。
hideTabBarRedDotByStorage(index, storageKey) {
Storage.get('gameRecharged').then(res => {
wx.hideTabBarRedDot({
}, () => {
wx.showTabBarRedDot({
这个设计真的太烂了。
怎么缓存?用哪种方式?
在tabbar页面navigateTo一个页面, 在新页面中执行wx.setTabBarBadge, wx.removeTabBarBadge会报出该错误
@白开水
{errMsg: "setTabBarBadge:fail not TabBar page"}
彬彬,你们目前这个问题解决了吗?
你们的小程序名字叫什么,我们学习下
正在加载...
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
目前是这么设计,可以缓存一下,tabBar页onShow的时候set上去
你认为这个设计好吗?
请问在IOS手机上,设置的内容会闪一下就消失了,在开发者工具上或者安卓上不会。为啥?
这样岂不是每个tabbar页onShow的时候都要判断一下,有计划改吗?
这个API设置真是邪门!
给你一个思路,全局App 定时刷新 消息,数量变化的时候,发送广播。所有tab页面 onLoad 时候 监听广播,onUnload 取消监听
// 注意:所有tab页面都需要绑定和解绑消息模块
// 说明:为何不全局app控制底部tab消息数量显示?因为当前页面非tab,操作底部数字显示会报错
// onLoad: message.addNotification()
// onUnload: message.removeNotification()
import {
getMessagerList
} from '../api/message.js'
const wxNotificationCenter = require('../utils/WxNotificationCenter.js')
const login = require('../utils/login.js')
let lastUnReadMessagerNum = 0
// 加载消息
const loadMsg = () => {
if (login.isLogin()) {
getMessagerList({
}).then((res) => {
// 获取第一条消息
let data = res.data
if (!data) {
return
}
// 统计未读消息数量
let unReadMessagerNum = 0;
data.forEach(item => {
if (item.isRead != true) {
unReadMessagerNum++;
}
});
if (lastUnReadMessagerNum != unReadMessagerNum) {
if (unReadMessagerNum) {
wx.setTabBarBadge({
index: 3,
text: unReadMessagerNum + "",
})
} else {
wx.removeTabBarBadge({
index: 3
})
}
// 触发广播
wxNotificationCenter.postNotificationName('messageChange', 3)
}
});
}
}
// 绑定广播监听
const addNotification = (moreFun) => {
wxNotificationCenter.addNotification('messageChange', (unReadMessagerNum) => {
if (unReadMessagerNum) {
wx.setTabBarBadge({
index: 3,
text: unReadMessagerNum + "",
})
} else {
wx.removeTabBarBadge({
index: 3
})
}
lastUnReadMessagerNum = unReadMessagerNum
if (moreFun) {
moreFun(unReadMessagerNum)
}
}, this)
}
// 解绑广播监听
const removeNotification = () => {
wxNotificationCenter.removeNotification('messageChange')
}
module.exports = {
loadMsg: loadMsg,
addNotification: addNotification,
removeNotification: removeNotification
}
wx.setTabBarBadger报错? AA 📖『東』📚🍵 的评论 - 微信开放社区 https://developers.weixin.qq.com/community/develop/doc/0008c8ff0c0020783eb6d099e51c00?jumpto=reply&commentid=000442eeb300c0e26abb358c35bc&parent_commentid=00086ca9364d201b97b627b715ac
用这个试试
setTimeout(() => {
wx.removeTabBarBadge({ index: 2 })
}, 0)
应该是和原生交互的问题。
解决办法就是通过localstorage去存储状态,再回退到上个Tab页面的时候,会调用onShow()方法,在onShow 和全局app.js里面的onshow。一起异步操作TabBar。
hideTabBarRedDotByStorage(index, storageKey) {
Storage.get('gameRecharged').then(res => {
wx.hideTabBarRedDot({
index: 3,
})
}, () => {
wx.showTabBarRedDot({
index: 3,
})
});
}
这个设计真的太烂了。
怎么缓存?用哪种方式?
在tabbar页面navigateTo一个页面, 在新页面中执行wx.setTabBarBadge, wx.removeTabBarBadge会报出该错误
@白开水
{errMsg: "setTabBarBadge:fail not TabBar page"}
彬彬,你们目前这个问题解决了吗?
你们的小程序名字叫什么,我们学习下