uniapp 自定義tabBar

uniapp 需要自定義tabBae 根據(jù)全向來展示tabBar的數(shù)據(jù)日熬,
首先 pages.json 頁面配置tabBar頁面


image.png

只要 pagePath 就行
然后在根目錄 創(chuàng)建 utils/ tabBar.js

// 主要權(quán)限
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": "我的"
    }
]
 
//別的權(quán)限
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,//裝船權(quán)限名  最后要存入 isMemberType里
    unloadVessel//卸船權(quán)限名 最后要存入 isMemberType里
}


然后利用vuex 來進行保存 uniapp不用下載 直接引入
官網(wǎng):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 中的內(nèi)容

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

const tabBar = {
    state: {
        // 判斷是否已登錄(member/notMember)
        isMemberType: '',
        // tabbar列表數(shù)據(jù)
        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: {
        // 底部導(dǎo)航欄數(shù)據(jù)
        tabBarList: {
            type: Array,
            required: true
        },
        // 當(dāng)前頁面路徑
        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中 根據(jù)權(quán)限來顯示展示什么tabBar

onShow: function() {

    uni.hideTabBar({}); //隱藏tabbar
//根據(jù) 條件來展示
      if(1==1){
          store.commit('setType', 'unloadVessel');
       }else{
          store.commit('setType', 'myTabBar');
        }
    
            
},

摘錄鏈接:https://blog.csdn.net/JunVei/article/details/126969160

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矛绘,一起剝皮案震驚了整個濱河市麻削,隨后出現(xiàn)的幾起案子缸托,更是在濱河造成了極大的恐慌特碳,老刑警劉巖漓踢,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脏毯,死亡現(xiàn)場離奇詭異,居然都是意外死亡霜瘪,警方通過查閱死者的電腦和手機珠插,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颖对,“玉大人捻撑,你說我怎么就攤上這事$偷祝” “怎么了顾患?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長训堆。 經(jīng)常有香客問我描验,道長,這世上最難降的妖魔是什么坑鱼? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任膘流,我火速辦了婚禮,結(jié)果婚禮上鲁沥,老公的妹妹穿的比我還像新娘呼股。我一直安慰自己,他們只是感情好画恰,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布彭谁。 她就那樣靜靜地躺著,像睡著了一般允扇。 火紅的嫁衣襯著肌膚如雪缠局。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天考润,我揣著相機與錄音狭园,去河邊找鬼。 笑死糊治,一個胖子當(dāng)著我的面吹牛唱矛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播井辜,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼绎谦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粥脚?” 一聲冷哼從身側(cè)響起窃肠,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刷允,沒想到半個月后铭拧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赃蛛,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年搀菩,在試婚紗的時候發(fā)現(xiàn)自己被綠了呕臂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡肪跋,死狀恐怖歧蒋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情州既,我是刑警寧澤谜洽,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站吴叶,受9級特大地震影響阐虚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蚌卤,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一实束、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逊彭,春花似錦咸灿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至囊榜,卻和暖如春审胸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卸勺。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工歹嘹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人孔庭。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像材蛛,于是被迫代替她去往敵國和親圆到。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容