解决自定义tabBar选中时的状态变换:通过 getTabBar 接口获取组件实例

本文介绍了一种解决小程序中底部tabBar选中状态显示异常的方法。通过使用getTabBar接口更新选中状态,确保了点击不同tab时正确显示选中效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景描述:

在这里插入图片描述
底部tabBar在切换时都会有对应被选中或未被选中的状态,我是在页面定义判断active与index的值是否相等,相等则显示被选中状态,反之显示未被选中状态。

第一个tab的index,active值为0;第二个tab的index,active值为1

bug描述:

点击第二个按钮时active的值一直为0,则index与active的值不相等,不会显示被选中时候的状态


解决方案:

在第二个tab对应页面js文件的onShow处写以下代码即可

    onShow() {
        const tabBar = this.getTabBar()
        tabBar.setData({
            active: 1
        })

最主要的是getTabBar接口为我们解决了问题。
那getTabBar接口是什么呢?
其实在官方文档已经有写到:
QQ小程序:QQ小程序自定义tabBar
微信小程序:微信小程序自定义tabBar

划重点!

  1. 每个 tab 页下的自定义 tabBar 组件实例是不同的,可通过自定义组件下的 getTabBar 接口,获取当前页面的自定义 tabBar 组件实例。
  2. 注意:如需实现 tab 选中态,要在当前页面下,通过 getTabBar 接口获取组件实例,并调用 setData 更新选中态。

代码:

/*index.qml*/
 <view class="tab-bar">
  <image qq:for="{{tabs}}" qq:key="index" class="tab-bar-item" data-index="{{index}}"  bindtap="switchTab"  src="{{active === index ? item.selectedIconPath : item.iconPath}}"></image>
</view>
//qq.js
Component({
    data: {
        active: 0,
        tabs: [{
            pagePath: "/pages/index/index",
            iconPath: "/images/tab_1.png",
            selectedIconPath: "/images/tab_1_selected.png"
        },{
            pagePath: "/pages/friend/friend",
            iconPath: "/images/tab_2.png",
            selectedIconPath: "/images/tab_2_selected.png"
        }]
    },
    methods: {
        switchTab(e){
            const index = +e.currentTarget.dataset.index
            const item = this.data.tabs[index]
            if(item){
                this.setData({
                    active: index
                })
                qq.switchTab({
                    url: item.pagePath
                })
            }
        }
    }

})
//index.qss
.tab-bar {
    position: absolute;
    z-index: -100;
    width: 360rpx;
    height: 92rpx;
    left: 180rpx;
    border-radius: 64rpx;
    background: #FFFFFF;
    bottom: 50rpx;
    margin: 0 auto;
    height: 96rpx;
    display: flex;
    justify-content: center;
    align-items: center;
    box-shadow: 0px 4rpx 16rpx rgba(0, 0, 0, 0.1), 0rpx 30rpx 166rpx rgba(0, 0, 0, 0.07), 0px 6.05678px 24.308px rgba(0, 0, 0, 0.0302586), 0px 3.854px 10.72px rgba(0, 0, 0, 0.0151263), 0px 2.0095px 4.20727px rgba(0, 0, 0, 0.00579);
  }
  .tab-bar-item{
    width: 172rpx;
    height: 76rpx;
  }

//friend.js
onShow() {
        this.loadFriend()
        const tabBar = this.getTabBar()
        tabBar.setData({
            active: 1
        })
    }

如果此篇博客能帮得到你,欢迎大家关注点赞评论收藏转发呀~

如有不足也请在评论区提出批评指正!多多指教!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值