当前位置:   article > 正文

uniapp 底部导航tabBar---循环获取刷新的数字角标_页面数据刷新后 tabbar角标数据刷新

页面数据刷新后 tabbar角标数据刷新

整体思路

        在全局 App.vue 中定义一个定时刷新消息的方法,然后通过uni.$on()监听对应点击的  tabBar页面 所传参数,进行判断执行对应的操作。当你在 tabBar页面 时,会通过uni.$emit()传参(获取并刷新最新消息),当你切换到 非tabBar页面 时,onHide 取消监听(停止获取消息)。


说明:为什么不全局app控制底部tab消息数量的刷新显示呢?

        因为当前页面非tab时,可是会报错的哦!也就是下面的报错(下面图是借用的,懒的改代码截图报错了,体谅一下)

错误原因:

        因为当你使用uni.setTabBarBadge设置角标或者红点时,必须在tabBer页面设置,当你跳转到非tabBer页面时就会出现报错。

        你可能会说:那怎么办呢?

        我:耐心的看下去哦,为了你那不报错的代码。


一. 在 app.vue 入口文件 created函数中,设置uni.$on('News')监听事件,根据tabBer页面传参进行判断执行对应事件;

代码如下:

  1. created: function() {
  2.     uni.$on('News', res => {
  3. console.log(res.msg)
  4. if (res.msg == 'monitor') {
  5. // 进入tabBer页面时执行定时器
  6. this.startTimer()
  7. } else {
  8. // 离开tabBer页面清除定时器
  9. clearInterval(this.timer)
  10. }
  11. })
  12. },

二.定义了开始和结束的方法,用于执行和清除定时器操作;

代码如下:

  1. methods: {
  2. startTimer() {
  3. this.timer = setInterval(() => {
  4. let num = uni.getStorageSync("numberOfMessage"); // 获取本地缓存数据
  5. if (num != num) { // 有新的消息时刷新消息
  6. uni.setTabBarBadge({
  7. index: 1,
  8. text: String(num)
  9. })
  10. } else if (num == num && num > 0) { // 消息不变并且消息数大于0
  11. // 设置角标
  12. uni.setTabBarBadge({
  13. index: 1,
  14. text: String(num)
  15. })
  16. } else { // 无消息
  17. // 移除角标
  18. uni.removeTabBarBadge({
  19. index: 1
  20. })
  21. clearInterval(this.timer)
  22. }
  23. }, 1000); // 1000毫秒即1秒
  24. },
  25. stopTimer() {
  26. clearInterval(this.timer); // 关闭定时器
  27. }
  28. }

 三.进入TabBar页面和离开TabBar页面;

       为什么放在onHide中呢?
              onHide()触发场景 :当前页面 ==》其他页面  当前页面会触发onHide();
              onUnload()触发的场景:页面2返回到(页面1或者导航页)时,页面2只会触发onUnload(),并不会触发onHide();
              大白话就是:页面切换看onHide(),页面返回用onUnload()
  1. onShow() {
  2. console.log("页面刷新")
  3. uni.$emit('News', {
  4. msg: 'monitor'
  5. })
  6. },
  7. onLoad() {},
  8. onHide() {
  9. console.log('离开当前页面')
  10. // 正确示例:提供正确的回调函数参数
  11. uni.$emit('News', {
  12. msg: 'departure'
  13. })
  14. },

提示:记得不要忘记在data中声明消息数,并把它缓存在本地呦(放在你设置的角标消息页面哦)!

NumOfMessage: 6, //消息数
uni.setStorageSync('numberOfMessage', this.NumOfMessage)

大家看完有什么觉得可以优化的地方,希望提出来分享一下哦!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/503342
推荐阅读
相关标签
  

闽ICP备14008679号