uni-app 微信小程序tabBar角标或徽标badge不生效 但Android安卓却显示正常

这篇具有很好参考价值的文章主要介绍了uni-app 微信小程序tabBar角标或徽标badge不生效 但Android安卓却显示正常。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

今天复习项目时又遇到了一个奇怪的问题:
使用uni-app写tabBar的中购物车右上角的角标时,从商品详情页点击添加到购物车后,商品详情右上角的角标数字会跟随Vuex仓库中的商品总数发生变化,但是主页面也就是tabBar页面中的购物车角标不会变化,或者只有第一次添加会变化,并且这个功能我已经通过混入mixin封装好了,在显示tabBar页面中都已引入。并且离谱的是安卓模拟器上这个效果却正常,并且第一次写该项目时也没遇到这个问题。

问题截图:

1.初始数据购物车数据截图:
uni-app 微信小程序tabBar角标或徽标badge不生效 但Android安卓却显示正常,uni-app,微信小程序,android,小程序,前端,javascript
2.点击加入购物车后左下角数量发生变化,控制台也打印了仓库中的总数信息:
uni-app 微信小程序tabBar角标或徽标badge不生效 但Android安卓却显示正常,uni-app,微信小程序,android,小程序,前端,javascript
3.点击"购物车"按钮,tabBar页面的购物车角标第一次修改显示正常
uni-app 微信小程序tabBar角标或徽标badge不生效 但Android安卓却显示正常,uni-app,微信小程序,android,小程序,前端,javascript

4.重新进入商品详情页,添加商品到购物车,可以看到左下角购物车角标显示正常为76,小程序控制台也同步打印出了Vuex对应的商品总数

uni-app 微信小程序tabBar角标或徽标badge不生效 但Android安卓却显示正常,uni-app,微信小程序,android,小程序,前端,javascript
5.问题点来了,重新回到tabBar页面的购物车右上角的角标仍然是第一次修改的61,多次尝试编译重新运行,重新打开Hbuilder都无效,并且使用安卓模拟器这个功能确实是正常的,这里为了节省篇幅就不截了。
uni-app 微信小程序tabBar角标或徽标badge不生效 但Android安卓却显示正常,uni-app,微信小程序,android,小程序,前端,javascript
在混入mixins的中控制tabBar的角标源代码如下:

//封装一个混入混入模块,相当于公共函数
import {mapState} from 'vuex' 
export default {
  computed:{
    ...mapState('m_cart',['totalCartNums'])
  },
  onLoad() {
    this.mySetTabBarBadge()
  },
  methods:{
    mySetTabBarBadge(){
      if(this.totalCartNums <=0 ){
        console.log("<1");
        uni.removeTabBarBadge({
          index:2
        })
      }else if(this.totalCartNums >=100){
        console.log(">99");
        uni.setTabBarBadge({
          index:2,
          text: '99+'
        })
      }else{
        console.log("1-99");
        uni.setTabBarBadge({
          index:2,
          text: this.totalCartNums.toString()
      })
    }
  }
},
  watch:{
    "totalCartNums":function(newVal){
      this.mySetTabBarBadge()
    }
  }
}

tabBar badge显示异常原因分析:

1.在混入里我使用了uni-app自带的uni.setTabBarBadge方法去修改tabBar页面的角标,并在我自定义的mySetTabBarBadge方法根据Vuex中商品总数去分情况展示tabBarBadge的显示样式。

2.为了防止tabBar页面的tabBarBadge不会响应式展示,我使用了watch监听器,一旦Vuex中totalCartNums发生了变化,就调用我自定义的mySetTabBarBadge方法去动态修改角标展示情况。

3.以目前的水平来看逻辑是没有问题的,但是就是出现了角标没有实时更新的情况,非常无奈。

4.后面在翻阅了不少博客后,原文链接如下:uni.setTabBarBadge 在非 tabbar 页面上更新无效问题,并且结合微信开放平台社区中一位网友的回答我解决了该问题,连接如下:wx.setTabBarBadge 在没有tabbar的页面设置了不生效。
简而言之,就是在我本身逻辑没有大的问题外,uni自带的setTabBarBadge方法在非tabBar页面不会自动更新。也就是说当我从非主包的页面,修改影响tabBarBadge展示的值后,调用uni.setTabBarBadge方法是不起作用的。

解决办法

既然非tabBar页面调用uni.setTabBarBadge方法无效,那么我们就在会展示tabBar页面的角标所有页面的onShow方法去调用,也就是修改混入里的onLoad方法为onShow方法

PS:onShow方法在小程序中就是页面一旦展示就会加载运行里面的代码块,这样不管我在什么界面,只要修改了影响tabBarBadge的值,再回到tabBar页面后,都会重新加载onShow方法,调用uni.setTabBarBadge去修改角标的展示,而在tabBar页面调用这个方法是不会出现异常的。

修改后的混入源码如下:

//封装一个混入混入模块,相当于公共函数
import {mapState} from 'vuex' 
export default {
  computed:{
    ...mapState('m_cart',['totalCartNums'])
  },
  //主要就是修改了这里,将onLoad方法修改为了onShow方法
  onShow() {
    this.mySetTabBarBadge()
  },
  methods:{
    mySetTabBarBadge(){
      if(this.totalCartNums <=0 ){
        console.log("<1");
        uni.removeTabBarBadge({
          index:2
        })
      }else if(this.totalCartNums >=100){
        console.log(">99");
        uni.setTabBarBadge({
          index:2,
          text: '99+'
        })
      }else{
        console.log("1-99");
        uni.setTabBarBadge({
          index:2,
          text: this.totalCartNums.toString()
      })
    }
  }
},
  watch:{
    "totalCartNums":function(newVal){
      this.mySetTabBarBadge()
    }
  }
}

运行截图就不再放了,就是商品详情页的购物车角标和tabBar页面的购物车角标会同步展示,符合预期情况。

另外,在第一次写该项目时,应该选的是默认的Vue3模板,在非tabBar页面调用uni.setTabBarBadge方法时,会报错误:Unhandled promise rejection {errMsg: “setTabBarBadge:fail not TabBar page”}。而本次选的Vue2模板,就没有这个错误提示,不过只要在混入里将设置角标的方法都写到onShow方法体中,页面渲染暂时是没问题的。

总结

在使用uni-app的setTabBarBadge方法修改角标时,如果非tabBar页面也会修改影响角标展示的值,那么应该在封装的展示角标的混入里,使用onShow生命周期函数去重新调用一次uni.setTabBarBadge,以避免不同tabBar页面和非tabBar页面切换时角标展示异常的问题。文章来源地址https://www.toymoban.com/news/detail-851223.html

到了这里,关于uni-app 微信小程序tabBar角标或徽标badge不生效 但Android安卓却显示正常的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序授权(uni-app)

    概述 为了避免重复开发,自己封装了一个通用用户授权回调方法,只需要传入需要授权的scope,权限中文描述、回调函数,就可以实现一整套小程序是否授权、打开授权设置,调用后续操作函数的工作 功能 可以根据自己的实际应用进行微调 目前使用的uni-app版本,可以根据自

    2024年02月16日
    浏览(43)
  • 语法速通 uni-app随笔【uni-app】【微信小程序】【vue】

    其中, pages 目录/ index 目录【必有】: index.js 编写业务逻辑 【初始数据,生命周期函数】 index.json 编写配置 index.wxml 编写模板 【可理解为本页html】 index.wxss 【可理解为本页css】 直接输入敲回车,连尖括号都不需要就可以标签补全 1)初始数据写死 在 index.wxml 引入变

    2024年02月12日
    浏览(76)
  • 【uni-app微信小程序】实现支付功能

    实现微信支付功能需要在小程序后台配置支付相关信息,并且在前端代码中调用微信支付API进行支付操作。好的, uni-app微信小程序实现支付功能整体流程 大致如下: 注册微信公众平台,并完成开发者资质认证; 在微信商户平台注册商户账号,并完成商户资质认证; 在商户

    2024年02月13日
    浏览(56)
  • uni-app微信小程序使用echarts

    前言:本来是使用的ucharts,但因为无法监听图例点击交互,满足不了需求,所以只能放弃。 首先,下载echart组件。可以先随便建个文件夹,然后 npm init。接着下载依赖 然后找到 node_modulesmpvue-echarts下的文件,如图 只留下src,其他的删掉(没有用到)。然后复制 mpvue-echart

    2024年02月10日
    浏览(40)
  • uni-app 微信小程序 激励视频广告

    封装激励视频-Ad.js 调用上面写的方法:

    2024年02月12日
    浏览(49)
  • uni-app(微信小程序)获取当前位置uni.getLocation

     1、微信公众平台  开发  开发管理   2、开通之后到项目文件    3、下载腾讯地图插件并引入到文件中    

    2024年02月11日
    浏览(35)
  • [uni-app] 微信小程序 如何修改替换头像

     如下图所示,微信小程序中涉及到修改头像的交互 技术: 前端应用框架为uni-app UI框架为uView  思考: 1. 头像点击事件 click 2.从本地相册选择图片或使用相机拍照 uni.chooseImage(OBJECT) ,方法执行成功后根据success中返回的图片的本地文件路径列表 tempFilePaths,做操作 3.上传图片

    2024年02月11日
    浏览(40)
  • uni-app 微信小程序 onReachBottom 不生效

    问题描述: uni-app 微信小程序,页面滑到底部,onReachBottom 没有生效 代码: pages.json 配置 使用 onReachBottom 的页面: 总结: 最外层容器设置 min-height: 100.1vh

    2024年02月07日
    浏览(32)
  • [uni-app]设置运行到微信小程序

    1、设置微信小程序开发工具路径 2、检查微信小程序开发工具是否开启了服务端口 服务端口要是没有开启,会报 × initialize。 3、在uni-app开发工具中点击运行微信开发者工具,微信开发工具运行成功。

    2024年02月13日
    浏览(41)
  • 微信小程序转uni-app注意事项

            如果你手头上有一套微信小程序的代码,怎样把它变成一个网页版或者app版本的呢?我推荐你使用uni-app。         使用uni-app可以很方便的将微信小程序代码翻译成uni-app项目,通过uni-app项目又可以编译成h5、app或微信小程序版本。这样一来,写一份代码同时可以

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包