业务上需要根据用户角色来动态配置底菜单,例如:角色A:需要使用底菜单 a,b,c;角色B:需要使用底菜单 a,c,d;角色C:需要使用底菜单 x,y,z,底菜单的数量是不固定的。参考了官方的自定义tabbar,似乎是无法满足需求的。官方自定义tabbar也需在json中声明,且‘只能配置最少 2 个、最多 5 个 tab’,只是把渲染这块交给了开发者。
抛开官方的方案,可以用自定义组件,然后在每个页面内引入组件,自己控制路由和显示内容。这个是可以满足业务需求,为了保证类似于原来的tabbar,路由用首页开始到tabbar页面,一直用 wx.redirectTo()。相应也出现了一些问题。
页面的生命周期发生了变化。这种路由条件下每次都会触发onload函数,这个是区别于原来的tabbar
每次进入页面自定义组件都要重新加载,会出现闪烁问题。这个情况在部分机型上还是挺明显的。
想过去修改页面栈,自己去模拟switchTab,尽管官方不建议修改。事实上我也没有找到修改的办法。getCurrentPages() 似乎返回页面栈拷贝,修改无效。
不知道各位有没有类似的解决方案,还望不吝赐教。
其实就是允许用户通过pc端的系统,自定义底菜单... 是不是有点难为小程序了。
找到一个简单的方法
只要你在app.json中设置tabBar
custom为true
list只保留pagePath,list的pagePath需要与自定义的tabBar的pagePath一致即可
就能直接使用wx.switchTab了
"tabBar": {
"custom": true,
"list": [
{
"pagePath": "pages/tabbar/index"
},
{
"pagePath": "pages/tabbar2/index"
}
]
}
https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.setTabBarItem.html
而B用户是普通用户,他进入小程序后tabbar需要展示:首页、最新资讯、我的。
这种场景就需要动态更改tabbar页面路径啊。
2、还有如果B用户进入只需要展示:首页、我的。这种情况的话我们就需要动态删除某个tabbar选项。这两种功能现在都没有,只能通过自定义tabbar去做,但是自定义tabbar比较麻烦,也没有自带的tabbar稳定。
即使是自定义的底菜单,还是只能在 json文件中声明的2-5个范围内。这块也是不满足需求的,令人头疼。