收藏
回答

wx.setTabBarBadger报错

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug wx.setTabBarBadge, wx.removeTabBarBadge 微信iOS客户端 iOS 6 2.0

在当前页为非tabbar页面时 调用wx.setTabBarBadge和wx.removeTabBarBadge会报错.


这是BUG还是就是这么设计的?

如果就这么设计的, 那么就不能通过worker线程来定时刷新TabBar状态了, 感觉这API就有点鸡肋了

回答关注问题邀请回答
收藏

11 个回答

  • 黄思程
    黄思程
    2018-05-07

    目前是这么设计,可以缓存一下,tabBar页onShow的时候set上去

    2018-05-07
    有用
    回复 7
    • 李乾坤David
      李乾坤David
      2018-07-19

      你认为这个设计好吗?

      2018-07-19
      回复
    • JustinYi
      JustinYi
      2018-07-21

      请问在IOS手机上,设置的内容会闪一下就消失了,在开发者工具上或者安卓上不会。为啥?

      2018-07-21
      回复
    • Why not?
      Why not?
      2018-12-05

      这样岂不是每个tabbar页onShow的时候都要判断一下,有计划改吗?

      2018-12-05
      回复
    • ꧁ℳℓ丘丘小羊ℓℳ꧂
      ꧁ℳℓ丘丘小羊ℓℳ꧂
      2019-07-29
      真的不好用
      2019-07-29
      回复
    • Antony
      Antony
      2020-12-10
      那Tab页有很多,每个都得onShow一么?
      2020-12-10
      回复
    查看更多(2)
  • 李乾坤David
    李乾坤David
    2018-07-19

    这个API设置真是邪门!

    2018-07-19
    有用 6
    回复
  • 张
    张
    2021-08-26

    给你一个思路,全局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

    }


    2021-08-26
    有用 1
    回复
  • AA 📖『東』📚🍵
    AA 📖『東』📚🍵
    2021-02-16

    wx.setTabBarBadger报错? AA 📖『東』📚🍵 的评论 - 微信开放社区 https://developers.weixin.qq.com/community/develop/doc/0008c8ff0c0020783eb6d099e51c00?jumpto=reply&commentid=000442eeb300c0e26abb358c35bc&parent_commentid=00086ca9364d201b97b627b715ac

    2021-02-16
    有用
    回复
  • undefined
    undefined
    2019-10-25

    用这个试试

    setTimeout(() => {
        wx.removeTabBarBadge({ index: 2 })
    }, 0)


    2019-10-25
    有用
    回复
  • 李姓的菜
    李姓的菜
    2018-09-10

    应该是和原生交互的问题。

    解决办法就是通过localstorage去存储状态,再回退到上个Tab页面的时候,会调用onShow()方法,在onShow 和全局app.js里面的onshow。一起异步操作TabBar。

    hideTabBarRedDotByStorage(index, storageKey) {

            Storage.get('gameRecharged').then(res => {

                  wx.hideTabBarRedDot({

                    index: 3,

                  })

            }, () => {

                  wx.showTabBarRedDot({

                    index: 3,

                })

            });

    }


    2018-09-10
    有用
    回复
  • 2018-09-06

    这个设计真的太烂了。

    2018-09-06
    有用
    回复
  • Ning
    Ning
    2018-07-27

    怎么缓存?用哪种方式?

    2018-07-27
    有用
    回复
  • 彬彬
    彬彬
    2018-05-03

    在tabbar页面navigateTo一个页面, 在新页面中执行wx.setTabBarBadge, wx.removeTabBarBadge会报出该错误

    2018-05-03
    有用
    回复
  • 彬彬
    彬彬
    2018-05-03

    @白开水

    {errMsg: "setTabBarBadge:fail not TabBar page"}

    2018-05-03
    有用
    回复 2
    • 2018-06-22

      彬彬,你们目前这个问题解决了吗?

      2018-06-22
      回复
    • 2018-06-22

      你们的小程序名字叫什么,我们学习下

      2018-06-22
      回复

正在加载...

登录 后发表内容