项目场景:
需求: 访问任意一个tarbar页面时,都要实时展示购物车对应的加购数据
方案:
- 小程序页面组件一般不会卸载, 所以侦听器立即执行那次只触发一次
- 一旦点了4个页面(首页,分类,购物车,我的),就会设置四个侦听器,只要total变化,4个侦听器都执行(执行了四次),而执行是在非tabbar页面,所以失效
- 等到了购物车页面,此时进入页面那次不会执行了(不卸载),而total也没变化了,也不会执行
- 为了在进入购物车页面时,重新设置角标代码执行,在onShow里执行uni.setTabBarBadge
- 多个页面都需要加上这个逻辑,因此建议放到mixins中
通过getters将加购总数量用total来表示:
新建 src/mixins/badge.js 并编写如下mixins代码
点击商品详情加入购物车,当前页购物车图标可以拿到total正确展示,但是点击购物车图标跳转购物车页面时,购物车的角标没更新!!! 错误信息如下:
在mixin中的onShow中判断,当total的数量大于0的开启微标,小于等于0时关闭微标
此时的业务已经是完成了,不过还是会有报错的提示,因此研究了解决方案,以下优化根据个人需求,仅供参考:
思路: 通过获取到的页面栈,设置一个包含tarbar的所有路由的常量,在判断newValue之前进行判断,如果不包含这些路径的情况下直接return,不执行以下代码,如果满足则执行
最后在对应的组件中引入badge.js中的mixins即可完成