评论

小程序自定义tabbar,根据权限显示不同的tabbar

小程序自定义tabbar,根据角色权限显示不同的tabbar

在小程序开发者,自定义tabbar,根据权限角色不同,显示不同的tabbar,经常遇到,这里给出一个解决方案。

1、修改app.json

"tabBar": {
    "custom":true
 }

2、在项目根目录创建一个文件夹 custom-tab-bar,组件,如图

custom-tab-bar/index.js

Component({

  /**
   * 组件的属性列表
   */
  properties: {

  },

  /**
   * 组件的初始数据
   */
  data: {
    active: -1,
    list: [
      { value: 0, show: true, label: '首页', icon: 'home', url: '/pages/index/index' },
      { value: 1, show: true, label: '订单', icon: 'task', url: '/pages/order/index/index' },
      { value: 2, show: true, label: '我的', icon: 'user', url: '/pages/my/index/index' },
    ],

  },

  /**
   * 组件的方法列表
   */
  methods: {
    onChange({detail: {value}}) {
      const {list} = this.data;
      console.log('value', value)
      this.setData({
        active: value,
      });
      wx.switchTab({
        url: list[value].url,
      })
    },
    init() {
      const page = getCurrentPages().pop();
      let urls = this.data.list.map(v => v.url);
      let active = urls.findIndex(v => v === `/${page.route}`);
      console.log('active',active)
      this.setData({
        active
      });
    },
	toggleMenu(role) {
    	// 在这里处理具体的权限业务逻辑
        // 下面是伪代码
        let {list} = this.data;
        if (role == 1) {
        	list[1].show = false;
            this.setData({list});
        }
    },
  }
})

custom-tab-bar/index.json

{
  "component": true,
  "usingComponents": {
    "t-tab-bar": "tdesign-miniprogram/tab-bar/tab-bar",
    "t-tab-bar-item": "tdesign-miniprogram/tab-bar-item/tab-bar-item"
  }
}

custom-tab-bar/index.wxml

<t-tab-bar t-class="t-tab-bar" value="{{active}}" bindchange="onChange" theme="tag" split="{{false}}">
	<block  wx:for="{{list}}">
	  <t-tab-bar-item wx:if="{{item.show}}" wx:key="index" value="{{item.value}}" icon="{{item.icon}}">
    	{{item.label}}
	  </t-tab-bar-item>
  </block>
</t-tab-bar>

3、在tabbar关联页面初始化tabbar组件的init方法

上面我们在tabbar写了三个路由,那么在这三个相对应的页面,都要调用一下下面的代码

onShow() {
    this.getTabBar().init()
  },

通过以上步骤已经实现了自定义tabbar的逻辑。

关于角色权限下的tabbar

在有些场景下,我们需要权限来控制显示tabbar,这个时候,我们可以在首页,请求数据,然后调用this.getTabBar().toggleMenu(); 来改变要显示的菜单,这样我们根据角色权限的tabbar就完成了。

最后一次编辑于  06-26  
点赞 2
收藏
评论

2 个评论

  • 阿白
    阿白
    07-30

    感谢创作,不过看你用的t-design……

    t-design的话,会出现index错位问题,切换tab,label、icon、value都更新了,但是点击会报错或者高亮混乱。

    跟踪了一下,发现t-design的设计是一种内部父子操作,互持引用,父更子,子更父。

    其中tab-item,t-design只在初始化时同步了一次,value变了,里面还有各种其它currname,check状态等统统没同步,非常糟心混乱……

    07-30
    赞同
    回复 1
    • 星跃
      星跃
      08-02
      确实,我复现了
      08-02
      回复
  • 小李
    小李
    发表于小程序端
    07-03

    大佬牛 我正好需要

    07-03
    赞同
    回复
登录 后发表内容