当前位置:   article > 正文

微信小程序 根据登录后的角色权限 渲染底部tabbar--自定义渲染tabbar_小程序底部权限菜单

小程序底部权限菜单
微信小程序模拟登录后 根据不同角色权限 渲染底部tabbar
(底部tabbar 用的是vant ui 提供的组件)

 1.权限一: 拥有的底部栏如图

1.2 权限二: 拥有的底部栏 如图

1.3 定义全局属性用于存储底部的tabbar渲染

一:  首先在全局文件App.json 配置tabbar (最少2个 最多5个),并且配置页面

  1. {
  2. "pages": [
  3. "pages/login/index",
  4. "pages/zy/index",
  5. "pages/myInfo/index",
  6. "pages/onlyOne/index",
  7. "pages/friend/index",
  8. "pages/setting/index"
  9. ],
  10. "window": {
  11. "backgroundTextStyle": "light",
  12. "navigationBarBackgroundColor": "#fff",
  13. "navigationBarTitleText": "微信登录",
  14. "navigationBarTextStyle": "black"
  15. },
  16. "tabBar": {
  17. "custom": true,
  18. "color": "#666666",
  19. "selectedColor": "#FF5F15",
  20. "backgroundColor": "#ffffff",
  21. "borderStyle": "black",
  22. "list": [
  23. {
  24. "pagePath": "pages/zy/index",
  25. "text": "主页"
  26. },
  27. {
  28. "pagePath": "pages/myInfo/index",
  29. "text": "我的信息"
  30. },
  31. {
  32. "pagePath": "pages/onlyOne/index",
  33. "text": "个人中心"
  34. },
  35. {
  36. "pagePath": "pages/friend/index",
  37. "text": "朋友信息"
  38. },
  39. {
  40. "pagePath": "pages/setting/index",
  41. "text": "手机设置"
  42. }
  43. ]
  44. },
  45. "sitemapLocation": "sitemap.json"
  46. }

二:login 页面

  1. 1.wxml:
  2. <view class="title">
  3. 欢迎登录
  4. </view>
  5. <!-- <button open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar" type="primary" size="mini">微信授权登录</button> -->
  6. <view>
  7. <button bindtap="login" data-type="1" type="primary" size="mini">权限1</button>
  8. </view>
  9. <view>
  10. <button bindtap="login" data-type="2" type="primary" size="mini">权限2</button>
  11. </view>
  12. 2. js
  13. // pages/login/index.js
  14. const app = getApp().globalData //获取并设置tabbar
  15. Page({
  16. /**
  17. * 页面的初始数据
  18. */
  19. data: {
  20. },
  21. login(e){
  22. const type = e.target.dataset.type
  23. if(type == 1){ //用户权限
  24. app.routerList = [
  25. {
  26. name:"主页",
  27. icon:"home-o",
  28. url:"/pages/zy/index",
  29. },
  30. {
  31. name:"我的信息",
  32. icon:"chat-o",
  33. url:"/pages/myInfo/index",
  34. },
  35. {
  36. name:"个人中心",
  37. icon:"https://b.yzcdn.cn/vant/icon-demo-1126.png",
  38. url:"/pages/onlyOne/index",
  39. }
  40. ]
  41. wx.reLaunch({
  42. url: '/pages/zy/index',
  43. })
  44. }else{
  45. app.routerList = [
  46. {
  47. name:"朋友信息",
  48. icon:"friends-o",
  49. url:"/pages/friend/index",
  50. },
  51. {
  52. name:"手机设置",
  53. icon:"setting-o",
  54. url:"/pages/setting/index",
  55. },
  56. {
  57. name:"个人中心",
  58. icon:"https://b.yzcdn.cn/vant/icon-demo-1126.png",
  59. url:"/pages/onlyOne/index",
  60. }
  61. ]
  62. wx.reLaunch({
  63. url: '/pages/friend/index',
  64. })
  65. }
  66. },
  67. })

如此一来便有了 登录后的路由信息

紧接着 第二步: 创建custom-tab-bar 文件夹 与pages 同级(如图:)

第三步:

custom-tab-bar 中编写代码

  1. 1.在index.wxml 中编写:
  2. <van-tabbar active="{{ active }}" bind:change="onChange">
  3. <van-tabbar-item bindtap="loadPage" data-url="{{item.url}}" wx:for="{{routerList}}" wx:key="index" icon="{{item.icon}}">
  4. {{item.name}}
  5. </van-tabbar-item>
  6. </van-tabbar>
  7. 2.在index.json 中编写:注意此处用的vant ui 库 如没下载清先npm下载后使用
  8. https://vant-contrib.gitee.io/vant-weapp/#/tabbar#api
  9. {
  10. "component": true,
  11. "usingComponents": {
  12. "van-tabbar": "@vant/weapp/tabbar/index",
  13. "van-tabbar-item": "@vant/weapp/tabbar-item/index",
  14. "van-icon": "@vant/weapp/icon/index"
  15. }
  16. }
  17. 3.在index.js中:
  18. Component({
  19. /**
  20. * 组件的属性列表
  21. */
  22. properties: {
  23. active:{ //对外提供当前选中的项 可以直接在每个页面中引入 以避免 tabbar显示与点击不同步的现象
  24. type:Number,
  25. value:0
  26. }
  27. },
  28. /**
  29. * 组件的初始数据
  30. */
  31. data: {
  32. routerList:[]
  33. },
  34. lifetimes:{
  35. attached(){
  36. this.setData({ routerList: getApp().globalData.routerList}); //获取路由
  37. console.log(this.data.routerList)
  38. }
  39. },
  40. /**
  41. * 组件的方法列表
  42. */
  43. methods: {
  44. onChange(event) {
  45. // event.detail 的值为当前选中项的索引
  46. this.setData({ active: event.detail });
  47. },
  48. loadPage(event){
  49. wx.switchTab({
  50. url: event.target.dataset.url,
  51. })
  52. },
  53. }
  54. })

第四步:

1.1 在每个页面的onShow 生命周期函数中加上这句代码:

如果不加会导致tabbar显示与点击不同步的现象

  1. onShow() {
  2. if (typeof this.getTabBar === 'function' &&
  3. this.getTabBar()) {
  4. console.log(this.getTabBar())
  5. this.getTabBar().setData({
  6. active: 1 //这里的active的值根据你的routerList 顺序一致
  7. })
  8. }
  9. },

1.2 如果不想加  也可以在你不想加上面那句代码的页面 中 配置json

如图

 

 wxml:active 直接设置为0即可

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/101548
推荐阅读
相关标签
  

闽ICP备14008679号