uniapp 底部导航tabBar---循环获取刷新的数字角标

本文讲述了如何在Vue应用中通过全局App.vue监听tabBar页面传参,实现消息的定时刷新和tabBar角标管理,避免在非tabBar页面引发错误。同时,作者分享了在onHide生命周期钩子中处理消息更新的方法和优化建议。
摘要由CSDN通过智能技术生成

整体思路

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


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

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

错误原因:

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

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

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


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

代码如下:

created: function() {
    uni.$on('News', res => {
		console.log(res.msg)
		if (res.msg == 'monitor') {
            // 进入tabBer页面时执行定时器
			this.startTimer()
		} else {
            // 离开tabBer页面清除定时器
			clearInterval(this.timer)
		}
	})
},

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

代码如下:

methods: {
	startTimer() {
		this.timer = setInterval(() => {
			let num = uni.getStorageSync("numberOfMessage"); // 获取本地缓存数据
			if (num != num) { // 有新的消息时刷新消息
				uni.setTabBarBadge({
					index: 1,
					text: String(num)
				})
			} else if (num == num && num > 0) { // 消息不变并且消息数大于0
                // 设置角标
				uni.setTabBarBadge({
					index: 1,
					text: String(num)
				})
			} else { // 无消息
                // 移除角标
				uni.removeTabBarBadge({
					index: 1
				})
    			clearInterval(this.timer)
			}
		}, 1000); // 1000毫秒即1秒
	},
	stopTimer() {
		clearInterval(this.timer); // 关闭定时器
	}
}

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

       为什么放在onHide中呢?
              onHide()触发场景 :当前页面 ==》其他页面  当前页面会触发onHide();
              onUnload()触发的场景:页面2返回到(页面1或者导航页)时,页面2只会触发onUnload(),并不会触发onHide();
              大白话就是:页面切换看onHide(),页面返回用onUnload()

		onShow() {
			console.log("页面刷新")
			uni.$emit('News', {
				msg: 'monitor'
			})
		},
		onLoad() {},
		onHide() {
			console.log('离开当前页面')
			// 正确示例:提供正确的回调函数参数
			uni.$emit('News', {
				msg: 'departure'
			})
		},

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

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

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

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
uniapp中使用scroll-view固定底部自定义tabbar的方法如下: 1. 首先,在页面底部添加一个固定的tabbar组件,例如: ```html <template> <view> <!-- 页面内容 --> <scroll-view scroll-y="true" style="height: {{scrollViewHeight}}rpx;" bindscroll="scrollviewScroll"> <!-- scroll-view的内容 --> </scroll-view> <!-- 固定的底部tabbar --> <custom-tabbar></custom-tabbar> </view> </template> ``` 2. 在页面的data中定义一个变量`scrollViewHeight`,用于设置scroll-view的高度,例如: ```javascript export default { data() { return { scrollViewHeight: 0 } }, // 其他代码... } ``` 3. 在页面的`onLoad`生命周期函数中,获取底部tabbar的高度,并计算scroll-view的高度,例如: ```javascript export default { onLoad() { // 获取底部tabbar的高度 const query = uni.createSelectorQuery().in(this) query.select('.custom-tabbar').boundingClientRect((res) => { // 计算scroll-view的高度 const windowHeight = uni.getSystemInfoSync().windowHeight const tabbarHeight = res.height const scrollViewHeight = windowHeight - tabbarHeight this.scrollViewHeight = scrollViewHeight }).exec() }, // 其他代码... } ``` 4. 在scroll-view的`bindscroll`事件中,监听scroll-view的滚动事件,例如: ```javascript export default { methods: { scrollviewScroll(e) { // 处理scroll-view的滚动事件 }, // 其他方法... }, // 其他代码... } ``` 通过以上步骤,你可以在uniapp中使用scroll-view固定底部自定义tabbar

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亭瞳^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值