当前位置:   article > 正文

uni-app自定义tabBar_uniapp自定义tabbar

uniapp自定义tabbar

目录

一、为什么使用自定义tabBar

二、使用步骤

1.修改pages.json文件

1.封装组件

2.tabBar页面引入组件

3.给子组件传值

4.登录页判断

5.隐藏原生tabBar



一、为什么使用自定义tabBar

目前的业务需求是根据不同的角色展示不同的底部tabBar

二、使用步骤

1.修改pages.json文件

开启自定义组件"custom": true,把list里面只留下页面路径

1.封装组件

  1. <template>
  2. <view class="tab-bar">
  3. <view class="content">
  4. <view class="one-tab" v-for="(item, index) in tabBarList" :key="index" @click="selectTabBar(item.pagePath)">
  5. <view>
  6. <view class="tab-img">
  7. <image v-if="routePath === item.pagePath" class="img" :src="item.selectedIconPath"></image>
  8. <image v-else class="img" :src="item.iconPath"></image>
  9. </view>
  10. </view>
  11. <view v-if="routePath === item.pagePath" class="tit selectTexts">{{ item.text }}</view>
  12. <view v-else class="tit texts">{{ item.text }}</view>
  13. </view>
  14. </view>
  15. </view>
  16. </template>
  17. <script>
  18. export default {
  19. props: {
  20. // 底部导航栏数据
  21. tabBarList: {
  22. type: Array,
  23. required: true
  24. },
  25. // 当前页面路径
  26. routePath: {
  27. type: String,
  28. required: true
  29. }
  30. },
  31. data() {
  32. return {};
  33. },
  34. methods: {
  35. selectTabBar(path) {
  36. this.$emit('onTabBar', path)
  37. }
  38. }
  39. };
  40. </script>
  41. <style lang="scss">
  42. .tab-bar {
  43. position: fixed;
  44. bottom: 0;
  45. left: 0;
  46. width: 100vw;
  47. padding-top: 10rpx;
  48. padding-bottom: calc(10rpx + constant(safe-area-inset-bottom));
  49. padding-bottom: calc(10rpx + env(safe-area-inset-bottom));
  50. background-color: #fff;
  51. .content {
  52. display: flex;
  53. .one-tab {
  54. display: flex;
  55. flex-direction: column;
  56. align-items: center;
  57. width: 50%;
  58. .tab-img {
  59. width: 50rpx;
  60. height: 50rpx;
  61. .img {
  62. width: 100%;
  63. height: 100%;
  64. }
  65. }
  66. .tit {
  67. font-size: 30rpx;
  68. transform: scale(0.7);
  69. }
  70. .selectTexts{
  71. color:#1890e1;
  72. }
  73. .texts{
  74. color: block;
  75. }
  76. }
  77. }
  78. }
  79. </style>

2.tabBar页面引入组件

<tabbar-vue :tabBarList="tabBarList" :routePath="routePath" @onTabBar="onTabBar"></tabbar-vue>

其中tabBarList是底部tabBarList、 routepath是是当前页面的路径、onTabBar是子组件向父组件传递的事件名称

import tabbarVue from '@/components/tabbarVue.vue'引入组件

 components: { tabbarVue  },注册组件

import member from'@/common/tabBar.js'

common里面定义的不同权限下的tabBar集合

  1. // 管理员
  2. const member = [
  3. {
  4. "pagePath": "pages/project/project",
  5. "iconPath": "/static/default_images/scene.png",
  6. "selectedIconPath": "/static/default_images/select-scene.png",
  7. "text": "场景"
  8. },
  9. {
  10. "pagePath": "pages/index/index",
  11. "iconPath":"/static/default_images/index.png",
  12. "selectedIconPath":"/static/default_images/select-index.png",
  13. "text": "我的"
  14. },
  15. ]
  16. // 普通用户
  17. const notMember = [{
  18. "pagePath": "pages/project/project",
  19. "iconPath": "/static/default_images/scene.png",
  20. "selectedIconPath": "/static/default_images/select-scene.png",
  21. "text": "扫码"
  22. },
  23. {
  24. "pagePath": "pages/index/index",
  25. "iconPath":"/static/default_images/index.png",
  26. "selectedIconPath":"/static/default_images/select-index.png",
  27. "text": "我的"
  28. }
  29. ]
  30. //抛出供外部调用
  31. export default {
  32. member,
  33. notMember
  34. }

3.给子组件传值

  1. let token = uni.getStorageSync("token");
  2. let routes = getCurrentPages(); // 获取当前打开过的页面路由数组
  3. let curRoute = routes[routes.length - 1].route // 获取当前页面路由,也就是最后一个打开的页面路由
  4. this.routePath=curRoute;
  5. //获取缓存里面的tabBar集合
  6. this.tabBarList= uni.getStorageSync("tabBarList");
  7. //没用token返回登录爷
  8. if (!token) {
  9. uni.reLaunch({
  10. url: '/pages/login/login',
  11. })
  12. }

4.登录页判断

我这里设有两个权限 0为工作人员 1为管理人员,根据不同的权限判断把tabBar放入缓存中。

5.隐藏原生tabBar

在app.vue里面

onShow: function() {
            uni.hideTabBar()
            console.log('App Show')
        },

自此我的自定义tabBar就完成了

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

闽ICP备14008679号