uniapp使用uni.setTabBarItem动态切换导航栏

登录时,需要根据不同的角色进入不同的主页,并且显示不同的导航栏,根据DCloud官网的API介绍,使用`uni.setTabBarItem`可以动态切换导航栏,但是其中的`pagePath`,`text`等关键参数修改均不生效,`iconPath`参数可以修改,但不重要,无法实现跳转页面的动态切换,于是转换思路,使用`visible`属性来实现动态切换的效果。

首先,需要在`pages.json`中定义所有导航页面,注意,是所有的,包含不同用户的导航页面

例如,我定义了10个导航按钮,前5个显示(不填`visible`参数时默认为`true`),后5个页面隐藏(`visible = false`)

"tabBar": {
    "borderStyle": "black",
    "backgroundColor": "#ffffff",
    "color": "#7A7E83",
    "selectedColor": "#0871E3",
    "iconfontSrc": "/static/fonts/iconfont.ttf",
    "list": [
        {
            "pagePath": "pages/index/index",
            "text": "%page.index1%",
            "iconfont": {
                "text": "\ue6a6",
                "selectedText": "\ue6a6",
                "fontSize": "22px",
                "color": "#7A7E83",
                "selectedColor": "#0871E3"
            }
        },
        {
            "pagePath": "pages/distributionManagement/distributionManagement",
            "text": "%page.index2%",
            "iconfont": {
                "text": "\ue60a",
                "selectedText": "\ue60a",
                "fontSize": "22px",
                "color": "#7A7E83",
                "selectedColor": "#0871E3"
            }
        },
        {
            "pagePath": "pages/report/report",
            "text": "%page.index3%",
            "iconfont": {
                "text": "\ue61e",
                "selectedText": "\ue61e",
                "fontSize": "22px",
                "color": "#7A7E83",
                "selectedColor": "#0871E3"
            }
        },
        {
            "pagePath": "pages/customerManage/customerManage",
            "text": "%page.index4%",
            "iconfont": {
                "text": "\ue639",
                "selectedText": "\ue639",
                "fontSize": "22px",
                "color": "#7A7E83",
                "selectedColor": "#0871E3"
            }
        },
        {
            "pagePath": "pages/mine/mine",
            "text": "%page.index5%",
            "iconfont": {
                "text": "\ue608",
                "selectedText": "\ue608",
                "fontSize": "22px",
                "color": "#7A7E83",
                "selectedColor": "#0871E3"
            }
        },
        {
            "pagePath": "pages/foreign/index/index",
            "text": "%page.index1%",
            "iconfont": {
                "text": "\ue6a6",
                "selectedText": "\ue6a6",
                "fontSize": "22px",
                "color": "#7A7E83",
                "selectedColor": "#0871E3"
            },
            "visible": false
        },
        {
            "pagePath": "pages/foreign/distributionManagement/distributionManagement",
            "text": "%page.index2%",
            "iconfont": {
                "text": "\ue60a",
                "selectedText": "\ue60a",
                "fontSize": "22px",
                "color": "#7A7E83",
                "selectedColor": "#0871E3"
            },
            "visible": false
        },
        {
            "pagePath": "pages/foreign/report/report",
            "text": "%page.index3%",
            "iconfont": {
                "text": "\ue61e",
                "selectedText": "\ue61e",
                "fontSize": "22px",
                "color": "#7A7E83",
                "selectedColor": "#0871E3"
            },
            "visible": false
        },
        {
            "pagePath": "pages/foreign/customerManage/customerManage",
            "text": "%page.index4%",
            "iconfont": {
                "text": "\ue639",
                "selectedText": "\ue639",
                "fontSize": "22px",
                "color": "#7A7E83",
                "selectedColor": "#0871E3"
            },
            "visible": false
        },
        {
            "pagePath": "pages/foreign/mine/mine",
            "text": "%page.index5%",
            "iconfont": {
                "text": "\ue608",
                "selectedText": "\ue608",
                "fontSize": "22px",
                "color": "#7A7E83",
                "selectedColor": "#0871E3"
            },
            "visible": false
        }
    ]
}

在登录时,提交到后台校验,并判断该用户的系统角色,例如我的系统中,有「普通用户」和「外商用户」两种角色,登录成功后将信息返回到前端。

例如,前端判断到这个用户是「外商用户」,那么循环10次(因为总共有10个导航页面),将前5个导航页面隐藏,后5个导航页面显示:

login() {
	let data = {} // 发送请求到后端校验登录信息得到data
	let isForeign = data.isForeign // 是否是外商用户
	// 如果是外商,隐藏普通用户页面,显示外商页面
	if (isForeign) {
		// 隐藏前5个导航,显示后5个导航页面
		for (let i = 0; i < 10; i++) {
			let visible = true
			if (i < 5) {
				visible = false
			}
			uni.setTabBarItem({
				index: i,
				visible: visible
			})
		}
		// 跳转外商用户首页页面
		uni.switchTab({
			url: '/pages/foreign/index/index'
		});
	} else {
		// 跳转普通用户首页页面
		uni.switchTab({
			url: '/pages/index/index'
		});
	}
}

 ⚠️请根据自己的系统进行相应的修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值