uniapp 自定义tabBar

uniapp 需要自定义tabBae 根据全向来展示tabBar的数据,
首先 pages.json 页面配置tabBar页面


image.png

只要 pagePath 就行
然后在根目录 创建 utils/ tabBar.js

// 主要权限
const member = [
    {
        "pagePath": "/pages/StoreHomePage/index",
        "iconPath": require("../static/p1.png"),
        "selectedIconPath": require("../static/p2.png"),
        "text": "主页"
    },
    {
        "pagePath": "/pages/VehicleRecoveryOrder/index",
        "iconPath": require("../static/p3.png"),
        "selectedIconPath": require("../static/p4.png"),
        "text": "订单"
    },
    {
        "pagePath": "/pages/My/index",
        "iconPath": require("../static/p5.png"),
        "selectedIconPath": require("../static/p6.png"),
        "text": "我的"
    }
]
 
//别的权限
const unloadVessel = [
    {
        "pagePath": "/pages/index/index",
        "iconPath": require("../static/p1.png"),
        "selectedIconPath": require("../static/p2.png"),
        "text": "主页"
    },
    {
        "pagePath": "/pages/My/index",
        "iconPath":require("../static/p5.png"),
        "selectedIconPath":require("../static/p6.png"),
        "text": "我的"
    }
]
 
export default {
    member,//装船权限名  最后要存入 isMemberType里
    unloadVessel//卸船权限名 最后要存入 isMemberType里
}


然后利用vuex 来进行保存 uniapp不用下载 直接引入
官网:https://uniapp.dcloud.net.cn/tutorial/vue3-vuex.html#%E7%8A%B6%E6%80%81%E7%AE%A1%E7%90%86vuex

image.png

modules/tabBar.js 中的内容

import tarBarUserType from '@/utils/tabBar.js';

const tabBar = {
    state: {
        // 判断是否已登录(member/notMember)
        isMemberType: '',
        // tabbar列表数据
        tabBarList: []

    },
    mutations: {
        setType(state, isMemberType) {
            console.log(state,isMemberType,123);
            state.isMemberType = isMemberType;
            state.tabBarList = tarBarUserType[isMemberType];
        }
    }
}

export default tabBar;

store/index

import Vue from 'vue'
import Vuex from 'vuex'
// import { createStore } from 'vuex'
import tabBar from './modules/tabBar.js'
// import getters from './getters'
Vue.use(Vuex)
export default new Vuex.Store({
    modules: {
        tabBar
    },
    state: {
        //
        zp: 'zp'
    },
    mutations: {
        //
    },
    actions: {
        //
    },
    getters : {
        tabBarList: state => state.tabBar.tabBarList,
        isMemberType: state => state.tabBar.isMemberType,
    }
})

然后封装一个 公用组件

<template>
    <view class="tab-bar">
        <view class="content">
            <view class="one-tab" v-for="(item, index) in tabBarList" :key="index" @click="selectTabBar(item.pagePath)">
                <view>
                    <view class="tab-img">
                        <image v-if="routePath === item.pagePath" class="img" :src="item.selectedIconPath"></image>
                        <image v-else class="img" :src="item.iconPath"></image>
                    </view>
                </view>
                <view class="tit">{{ item.text }}</view>
            </view>
        </view>
    </view>
</template>

<script>
export default {
    props: {
        // 底部导航栏数据
        tabBarList: {
            type: Array,
            required: true
        },
        // 当前页面路径
        routePath: {
            type: String,
            required: true
        }
    },
    data() {
        return {};
    },
    methods: {
        selectTabBar(path) {
            console.log(path);
            this.$emit('onTabBar', path)
        }
    }
};
</script>

<style lang="scss" scoped>
.tab-bar {
        position: fixed;
        bottom: 0;
        left: 0;
        width: 100vw;
        padding: 0rpx;
        padding-bottom: calc(10rpx + constant(safe-area-inset-bottom));
        padding-bottom: calc(10rpx + env(safe-area-inset-bottom));
        background-color: #fff;
        border-top: 1px solid #e0e0e0;
        padding-top: 5px;
        // background-color: red;
        // height:80rpx;
 
 
        .content {
            display: flex;
            flex-direction: row;
 
            .one-tab {
 
                display: flex;
                flex-direction: column;
                align-items: center;
                width: 100%;
                // background-color: pink;
 
                .tab-img {
                    width: 50rpx;
                    height: 50rpx;
 
                    .img {
                        width: 100%;
                        height: 100%;
                    }
                }
 
                .tit {
                    font-size: 25rpx;
                    transform: scale(0.7);
                }
            }
        }
    }
</style>


然后使用的页面

<template>
    <view class="_abbr1">
        <TabBer  :tabBarList='tabBarList' routePath="/pages/index/index" @onTabBar="onTabBar" />
    </view>
</template>

<script>
    import TabBer from '@/components/TabBer/index.vue'
    import store from '@/store/index.js';
    export default {
        components: {
            TabBer
        },
        data() {
            return {
                
                
            }
        },
        computed: {
            tabBarList() {
            
                return store.getters.tabBarList
            }
        },
        onLoad() {
            // member
            
        },
        methods: {
            onTabBar(path){
                uni.switchTab({
                    url:path
                })
        
            },
        }
    }
</script>

<style scoped>
    
</style>

最后在APP.vue中 根据权限来显示展示什么tabBar

onShow: function() {

    uni.hideTabBar({}); //隐藏tabbar
//根据 条件来展示
      if(1==1){
          store.commit('setType', 'unloadVessel');
       }else{
          store.commit('setType', 'myTabBar');
        }
    
            
},

摘录链接:https://blog.csdn.net/JunVei/article/details/126969160

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容