文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

微信小程序怎么根据不同用户切换不同TabBar

2023-06-30 07:13

关注

今天小编给大家分享一下微信小程序怎么根据不同用户切换不同TabBar的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

现有需求:

小程序用户有三种身份(公众、运维人员、领导),根据不同用户身份显示不同的tabbar

众所周知微信小程序全局文件app.json里面的"tabBar"里面的list只能放置2-5个,要想实现3个tabbar,必须得复用tabbar,三种身份都需要个人中心,剩下的是长列表(两个),表单,图表 刚好是5个,废话少说,上代码

1全局.app.json

tabbar里面的sustom要设置为true

"custom": true,
{  "pages": [    xxxxxx:xxxxxx     ],  "window": {   xxxxxxxxx  },  "tabBar": {    "custom": true,    "color": "#7A7E83",    "selectedColor": "#d81e06",    "borderStyle": "black",    "backgroundColor": "#ffffff",    "list": [      {        "pagePath": "pages/Users/myrepaire/myrepaire",        "text": "我要报修",        "iconPath": "/images/tabbar/weixiu1.png",        "selectedIconPath": "/images/tabbar/weixiu2.png"      },      {        "pagePath": "pages/Users/myMalfunction/myMalfunction",        "text": "我的故障",        "iconPath": "/images/tabbar/myweixiu1.png",        "selectedIconPath": "/images/tabbar/myweixiu2.png"      },      {        "pagePath": "pages/logs/logs",        "text": "个人中心",        "iconPath": "/images/tabbar/user1.png",        "selectedIconPath": "/images/tabbar/user2.png"      },      {        "pagePath": "pages/weixiu/myweixiu/myweixiu",        "text": "我的维修",        "iconPath": "/images/tabbar/myweixiu1.png",        "selectedIconPath": "/images/tabbar/myweixiu1.png"      },      {        "pagePath": "pages/charts/charts",        "text": "故障报表",        "iconPath": "/images/tabbar/chart1.png",        "selectedIconPath": "/images/tabbar/chart2.png"      }    ]  },  "sitemapLocation": "sitemap.json"}

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

2.自定义custom-tab-bar

(详见微信官方文档)

微信小程序怎么根据不同用户切换不同TabBar

index.js

Component({  data: {    selected: 0,    color: "#000000",    roleId: '',    selectedColor: "#1396DB",    allList: [{      list1: [{        pagePath: "/pages/Users/myrepaire/myrepaire",        iconPath: "/images/tabbar/weixiu1.png",        selectedIconPath: "/images/tabbar/weixiu2.png",        text: "我要报修"      }, {        pagePath: "/pages/Users/myMalfunction/myMalfunction",        iconPath: "/images/tabbar/myweixiu1.png",        selectedIconPath: "/images/tabbar/myweixiu2.png",        text: "我的故障"      }, {        pagePath: "/pages/logs/logs",        text: "个人中心",        iconPath: "/images/tabbar/user1.png",        selectedIconPath: "/images/tabbar/user2.png"      }],      list2: [{        pagePath: "/pages/weixiu/myweixiu/myweixiu",        iconPath: "/images/tabbar/weixiu1.png",        selectedIconPath: "/images/tabbar/weixiu2.png",        text: "我要维修"      }, {        pagePath: "/pages/Users/myMalfunction/myMalfunction",        iconPath: "/images/tabbar/myweixiu1.png",        selectedIconPath: "/images/tabbar/myweixiu2.png",        text: "我的维修"      }, {        pagePath: "/pages/logs/logs",        text: "个人中心",        iconPath: "/images/tabbar/user1.png",        selectedIconPath: "/images/tabbar/user2.png"      }],      list3: [{        pagePath: "/pages/Users/myrepaire/myrepaire",        iconPath: "/images/tabbar/weixiu1.png",        selectedIconPath: "/images/tabbar/weixiu2.png",        text: "我要报修"      }, {        pagePath: "/pages/charts/charts",        iconPath: "/images/tabbar/chart1.png",        selectedIconPath: "/images/tabbar/chart2.png",        text: "故障报表"      }, {        pagePath: "/pages/logs/logs",        text: "个人中心",        iconPath: "/images/tabbar/user1.png",        selectedIconPath: "/images/tabbar/user2.png"      }]    }],    list: []  },  attached() {    const roleId = wx.getStorageSync('statu')    if (roleId == 20) {      this.setData({        list: this.data.allList[0].list1      })    }else if(roleId==5){      this.setData({        list: this.data.allList[0].list3      })    }else if(roleId==102){      this.setData({        list: this.data.allList[0].list2      })    }  },  methods: {    switchTab(e) {      const data = e.currentTarget.dataset      const url = data.path      wx.switchTab({ url })      this.setData({        selected: data.index      })    }  },})

分析:

  1. 首先,小程序tabbar只识别list里面的东西

  2. 先在data中定义一个list和allList数组,把三重身份用户的list分别定义为list1,list2,list3,放入allList

  3. const roleId = wx.getStorageSync('statu')
    获取用户信息存到缓存中,根据不同和的roleId来判断是什么身份,

  4. this.setData({ list: this.data.allList[0].list2 })
    根据身份把allList里面的子数组赋值给系统默认识别的`list``

  5. switchTab的作用根据不同的路径切换tabbar下标

   switchTab(e) {      const data = e.currentTarget.dataset      const url = data.path      wx.switchTab({ url })      this.setData({        selected: data.index      })    }

index.json

{  "usingComponents": {}}

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 class="cover-image" src="{{selected === index ? item.selectedIconPath : item.iconPath}}"></cover-image>    <cover-view class="cover-view" >{{item.text}}</cover-view>  </cover-view></cover-view>

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: 44rpx;  height: 44rpx;}.tab-bar-item .cover-view {  margin-top: 8rpx;  font-size: 24rpx;}

最后,在tabbar里面设置过 pagePath的路径文件下的 xxx.js的onshow:function(){}里面设置

或者说凡是用到tabbar组件的页面对应的xx.js里的onshow:function(){}都要按照以下进行设置

不然会出现tabbar显示与点击不同步的现象

    onShow: function () {    if (typeof this.getTabBar === 'function' &&      this.getTabBar()) {      this.getTabBar().setData({        selected: 0      })    }  },//selected: 0就是选中的tabbar下标,根据不同页面显示不同tabbar下标

结果展示

普通用户

微信小程序怎么根据不同用户切换不同TabBar

运维人员

微信小程序怎么根据不同用户切换不同TabBar

领导

微信小程序怎么根据不同用户切换不同TabBar

可以看到根据用户信息里的roleId成功的切换了不同的tabbar

以上就是“微信小程序怎么根据不同用户切换不同TabBar”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯