小程序根据不同用户,显示不同tabBar

小程序根据不同用户,显示不同tabBar(官方自定义 tabBar)

现有需求:小程序用户有2种身份(vip,普通用户)
微信小程序全局文件app.json里面的"tabBar"里面的list只能放置2-5个;

代码实现

1、app.json
tabbar里面的sustom要设置为true

{
    "pages": [
        xxxx

    ],
    "window": {
        "backgroundTextStyle": "light",
        "navigationBarBackgroundColor": "#ffffff",
        "navigationStyle": "default",
        "navigationBarTextStyle": "black"
    },
    "tabBar": {
        "custom": true,
        "color": "#BDBDBD",
        "selectedColor": "#212121",
        "backgroundColor": "#FFFFFF",
        "list": [{
                "pagePath": "pages/index/index",
                "text": "首页",
                "iconPath": "img/tabicon/home.png",
                "selectedIconPath": "img/tabicon/home-active.png"
            },
            {
                "pagePath": "pages/signin/signin",
                "text": "签到",
                "iconPath": "img/tabicon/sign.png",
                "selectedIconPath": "img/tabicon/sign-active.png"
            },
            {
                "pagePath": "pages/card/card",
                "text": "优惠券",
                "iconPath": "img/tabicon/card.png",
                "selectedIconPath": "img/tabicon/card-active.png"
            },
            {
                "pagePath": "pages/profitSelect/profitSelect",
                "text": "收益",
                "iconPath": "img/tabicon/card.png",
                "selectedIconPath": "img/tabicon/card-active.png"
            },
            {
                "pagePath": "pages/my/my",
                "text": "我的",
                "iconPath": "img/tabicon/my.png",
                "selectedIconPath": "img/tabicon/my-active.png"
            }
        ]
    },
    "style": "v2",
    "sitemapLocation": "sitemap.json"
}

可以看到app.json里面放了5个不同的tabbar路径

2、自定义tabbar( custom-tab-bar官方命名)
在这里插入图片描述
(1)index.js

  1. 小程序tabbar只识别list
  2. 根据用户缓存信息,判断用户的身份或登录状态(roleId == ‘’ || roleId == 2)
  3. 根据用户的身份把tabList里面的子数组赋值给系统默认识别的`list``
  4. switchTab的作用根据不同的路径切换tabbar下标
Component({
    data: {
        selected: 0,
        color: "#BDBDBD",
        roleId: '',
        selectedColor: "#212121",
        tabList: [{

            list1: [{
                    "pagePath": "/pages/index/index",
                    "text": "首页",
                    "iconPath": "/img/tabicon/home.png",
                    "selectedIconPath": "/img/tabicon/home-active.png"
                },
                {
                    "pagePath": "/pages/signin/signin",
                    "text": "签到",
                    "iconPath": "/img/tabicon/sign.png",
                    "selectedIconPath": "/img/tabicon/sign-active.png"
                },
                {
                    "pagePath": "/pages/card/card",
                    "text": "优惠券",
                    "iconPath": "/img/tabicon/card.png",
                    "selectedIconPath": "/img/tabicon/card-active.png"
                },
                {
                    "pagePath": "/pages/my/my",
                    "text": "我的",
                    "iconPath": "/img/tabicon/my.png",
                    "selectedIconPath": "/img/tabicon/my-active.png"
                }
            ],



            list2: [{
                    "pagePath": "/pages/index/index",
                    "text": "首页",
                    "iconPath": "/img/tabicon/home.png",
                    "selectedIconPath": "/img/tabicon/home-active.png"
                },
                {
                    "pagePath": "/pages/signin/signin",
                    "text": "签到",
                    "iconPath": "/img/tabicon/sign.png",
                    "selectedIconPath": "/img/tabicon/sign-active.png"
                },
                {
                    "pagePath": "/pages/profitSelect/profitSelect",
                    "text": "收益",
                    "iconPath": "/img/tabicon/card.png",
                    "selectedIconPath": "/img/tabicon/card-active.png"
                },
                {
                    "pagePath": "/pages/my/my",
                    "text": "我的",
                    "iconPath": "/img/tabicon/my.png",
                    "selectedIconPath": "/img/tabicon/my-active.png"
                }
            ],
        }],
        list: []
    },
    attached() {
        const roleId = wx.getStorageSync('is_vip')
        if (roleId == '' || roleId == 2) { //普通用户和未登录时默认第一种
            this.setData({
                list: this.data.tabList[0].list1
            })
        } else if (roleId == 1) { //vip用户显示第二种
            this.setData({
                list: this.data.tabList[0].list2
            })
        }
    },
    methods: {
        switchTab(e) {
            const data = e.currentTarget.dataset
            const url = data.path
            wx.switchTab({ url })
            this.setData({
                selected: data.index
            })
        }
    },



})

(2)index.wxml(可参照官方文档

<cover-view class="tab-bar">
    <cover-view class="tab-bar-border"></cover-view>
    <cover-view wx:for="{{list}}" wx:key="index" class="tab-bar-item" data-path="{{item.pagePath}}" data-index="{{index}}" bindtap="switchTab">
      <cover-image src="{{selected === index ? item.selectedIconPath : item.iconPath}}"></cover-image>
      <cover-view :style="color: {{selected === index ? selectedColor : color}}">{{item.text}}</cover-view>
    </cover-view>
  </cover-view>

ps:有时会报错,修改调试
在这里插入图片描述
(3)index.wxss(参照官方文档

.tab-bar {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    height: 48px;
    background: white;
    display: flex;
    padding-bottom: env(safe-area-inset-bottom);
}

.tab-bar-border {
    background-color: rgba(0, 0, 0, 0.33);
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 1px;
    transform: scaleY(0.5);
}

.tab-bar-item {
    flex: 1;
    text-align: center;
    display: flex;
    justify-content: center;
    align-items: center;
    flex-direction: column;
}

.tab-bar-item cover-image {
    width: 27px;
    height: 27px;
}

.tab-bar-item cover-view {
    font-size: 10px;
}

3、凡是需要显示tabbar组件的页面,对应的xx.js里的onshow:function(){}都要按照以下进行设置方可显示tabber(selected的值是这个页面在tabbar中的顺序)

onShow() {
        if (typeof this.getTabBar === 'function' &&
            this.getTabBar()) {
            this.getTabBar().setData({
                selected: 0
            })
        }
    },

emmm

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
可以通过微信小程序权限管理和条件渲染来实现根据权限显示不同tabbar。 首先,在小程序的 app.json 文件定义所有的 tabbar,包括权限不足的 tabbar。然后在小程序的全局变量保存用户权限信息。 接下来,在小程序的页面使用条件渲染来根据用户权限动态显示或隐藏 tabbar。可以使用 wx.getStorageSync 方法获取用户权限信息,然后根据权限信息决定是否显示相应的 tabbar。 示例代码如下: 1. app.json 定义所有的 tabbar ```json { "tabBar": { "list": [ { "pagePath": "pages/index/index", "text": "首页", "iconPath": "images/tabbar/home.png", "selectedIconPath": "images/tabbar/home-active.png" }, { "pagePath": "pages/cart/cart", "text": "购物车", "iconPath": "images/tabbar/cart.png", "selectedIconPath": "images/tabbar/cart-active.png" }, { "pagePath": "pages/mine/mine", "text": "我的", "iconPath": "images/tabbar/mine.png", "selectedIconPath": "images/tabbar/mine-active.png" }, { "pagePath": "pages/permission/permission", "text": "无权限", "iconPath": "images/tabbar/permission.png", "selectedIconPath": "images/tabbar/permission-active.png" } ] } } ``` 2. 在小程序的全局变量保存用户权限信息 ```javascript // 在 app.js 定义全局变量 App({ globalData: { userPermission: 1 // 用户权限,1 表示权限足够,0 表示权限不足 } }) ``` 3. 在页面使用条件渲染来根据用户权限动态显示或隐藏 tabbar ```html <!-- 在页面使用条件渲染来根据用户权限动态显示或隐藏 tabbar --> <view> <navigator wx:if="{{userPermission === 1}}" url="/pages/index/index"> <image src="/images/tabbar/home.png"></image> <text>首页</text> </navigator> <navigator wx:if="{{userPermission === 1}}" url="/pages/cart/cart"> <image src="/images/tabbar/cart.png"></image> <text>购物车</text> </navigator> <navigator wx:if="{{userPermission === 1}}" url="/pages/mine/mine"> <image src="/images/tabbar/mine.png"></image> <text>我的</text> </navigator> <navigator wx:if="{{userPermission === 0}}" url="/pages/permission/permission"> <image src="/images/tabbar/permission.png"></image> <text>无权限</text> </navigator> </view> ``` 注:以上代码仅供参考,具体实现方式还需要根据业务需求进行相应的调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值