uniapp動態底部tab欄

實現思路:

? ? ? ? 創建一個js文件用來存放所有的tabbar,不同的數組表示不同的tabbar組合。
? ? ? ? 創建一個vue文件用來制作底部tabbar組件。
? ? ? ? 使用vuex存儲用戶的身份信息,根據身份信息切換tabbar組合。
具體步驟:

? ? ? ?新建一個tabbar.js文件,將不同的tabbar組合用不同的數組表示出來。

// 公共頁面
export const publicBar = [{"pagePath": "/pages/home/index","iconPath": require("@/static/logo.png"),"selectedIconPath": require("@/static/logo2.jpg"),"text": "首頁"},{"pagePath": "/pages/car/index","iconPath": require("@/static/logo.png"),"selectedIconPath": require("@/static/logo.png"),"text": "購物車"}
]// 自己的頁面
export const selfBar = [{"pagePath": "/pages/home/index","iconPath": require("@/static/logo.png"),"selectedIconPath": require("@/static/logo.png"),"text": "首頁"},{"pagePath": "/pages/mine/index","iconPath": require("@/static/logo.png"),"selectedIconPath": require("@/static/logo.png"),"text": "我的"},
]


創建一個vue文件編寫底部tabbar組件代碼。

<template><view class="tabbar-list"><view class="tabbar-item" v-for="(item, index) in tabBarList" :key="index" @click="changeActive(item, index)"><image class="img" :src="activeIndex === index ? item.selectedIconPath : item.iconPath"></image><view>{{ item.text }}</view></view></view>
</template><script>import {mapState,mapMutations} from 'vuex'export default {data() {return {}},computed: {...mapState('tabBarModule', ['activeIndex', 'tabBarList']),},methods: {...mapMutations('tabBarModule', ['setUserInfo', 'changeIndex']),// 修改點擊的tabbar項changeActive(item, index) {this.changeIndex(index)uni.switchTab({url: item.pagePath})},},mounted() {// 模擬登錄后獲取的用戶信息,'public'為公共模塊,非'public'為我的模塊this.setUserInfo('public')// this.setUserInfo('mine') 用這個進行切換就能看到不同的底部tabbar}}
</script>
<style lang="scss" scoped>.tabbar-list {display: flex;position: fixed;bottom: 0;width: 100%;height: 100rpx;border: 1px solid #ccc;overflow: hidden;.tabbar-item {flex: 1;display: flex;flex-direction: column;align-items: center;justify-content: center;.img {width: 50rpx;height: 50rpx;}}}
</style>


在根目錄創建store文件夾,在store文件夾下創建module文件夾和創建index.js文件,在module文件夾下面創建tabBarModule.js文件。 ? ? ? ? ? ? ? ? ? ? ? ? ? ??
在tabBarModule.js文件中編寫vuex代碼,然后在store文件夾下面的index.js文件中引入tabBarModule.js文件作為一個模塊。

// 引入兩個tabbar組合
import {publicBar,selfBar
} from '@/utils/tabbar.js'
export default {// 開啟命名空間namespaced: true,// 存放基礎數據state: {// 用戶信息userInfo: uni.getStorageSync('userInfo') || '',// 初始化一個空的tabbar組合tabBarList: [],// 當前選中的tabbar項,控制頁面刷新導航高亮位置不變activeIndex: uni.getStorageSync('acIndex') || 0,?},mutations: {// 保存用戶信息setUserInfo(state, token) {uni.setStorageSync('userInfo', token)state.userInfo = token;// 根據用戶信息切換tabbar組合token !== 'public' ?state.tabBarList = selfBar :state.tabBarList = publicBar},// 記錄當前選中的tabbar項changeIndex(state, index) {uni.setStorageSync('acIndex', index)state.activeIndex = index}},
}
在index.js文件中引入tabBarModule模塊,并且在mian.js中引入store
import tabBarModule from '@/store/module/tabBarModule.js'
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({modules: {tabBarModule}
})


在每個頁面引入剛才的底部tabbar組件,并且使用uni.hideTabBar()隱藏默認導航欄

附上page.json文件供參考?

{"pages": [ //pages數組中第一項表示應用啟動頁,參考:https://uniapp.dcloud.io/collocation/pages{"path": "pages/home/index","style": {"navigationBarTitleText": "home"}},{"path": "pages/mine/index","style": {"navigationBarTitleText": "mine"}},{"path": "pages/car/index","style": {"navigationBarTitleText": "car"}}],"globalStyle": {"navigationBarTextStyle": "black","navigationBarTitleText": "uni-app","navigationBarBackgroundColor": "#F8F8F8","backgroundColor": "#F8F8F8"},"uniIdRouter": {},"tabBar": {"list": [{"pagePath": "pages/home/index"},{"pagePath": "pages/mine/index"},{"pagePath": "pages/car/index"}]}
}


原文鏈接:https://blog.csdn.net/weixin_47190975/article/details/129353819

親測有效,另外,點擊退出后重新登錄跳轉首頁activeIndex不會自動切換(即tab欄激活項未切換),在登錄成功跳轉首頁前添加this.changeIndex(0)即可

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36259.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot 整合MyBatis

整合MyBatis 官方文檔&#xff1a;http://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/ Maven倉庫地址&#xff1a;https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter/2.1.3 整合測試 導入 MyBatis 所需要的…

數據結構筆記--優先隊列(大小根堆)經典題型

1--項目的最大利潤 題目描述&#xff1a; 輸入&#xff1a;正數數組 costs&#xff0c;costs[i] 表示項目 i 的花費&#xff1b;正數數組 profits&#xff0c;profits[i] 表示項目 i 的花費&#xff1b;正數 k 表示只能串行完成最多 k 個項目&#xff1b;m 表示擁有的資金&…

MySQL事務:確保數據完整性與并發性的關鍵

MySQL事務&#xff1a;確保數據完整性與并發性的關鍵 MySQL作為一種廣泛使用的開源關系型數據庫管理系統&#xff0c;具備強大的事務支持&#xff0c;以確保數據庫操作的一致性、隔離性和持久性。本文將深入探討MySQL中的事務概念、事務隔離級別以及事務的應用場景&#xff0c…

leetcode 516. 最長回文子序列(JAVA)題解

題目鏈接https://leetcode.cn/problems/longest-palindromic-subsequence/description/?utm_sourceLCUS&utm_mediumip_redirect&utm_campaigntransfer2china 目錄 題目描述&#xff1a; 暴力遞歸&#xff1a; 動態規劃&#xff1a; 題目描述&#xff1a; 給你一個…

Python學習過程筆記:主模塊(main) 異常處理 命令行參數解析 日志記錄 socket模塊 類的私有方法 字節字符串

文章目錄 1.Python中的主程序2.Python中的異常處理3.Python中的命令行參數解析4.Python中的日志記錄5.網絡編程socket模塊6.Python中的私有方法7.Python中的字節字符串 1.Python中的主程序 if __name__ __main__在Python中&#xff0c;if __name__ __main__ 是一個常見的代碼…

百日筑基篇——python爬蟲學習(一)

百日筑基篇——python爬蟲學習&#xff08;一&#xff09; 文章目錄 前言一、python爬蟲介紹二、URL管理器三、所需基礎模塊的介紹1. requests2. BeautifulSoup1. HTML介紹2. 網頁解析器 四、實操1. 代碼展示2. 代碼解釋1. 將大文件劃分為小的文件&#xff08;根據AA的ID數量劃…

簡單認識Zabbix監控系統及配置

文章目錄 一、zabbix概述1、定義2、zabbix監控原理3、監控對象4、zabbix的3種架構&#xff08;1&#xff09; C/S架構&#xff08;2&#xff09;分布式架構&#xff1a;zabbix-proxy-client架構&#xff08;3&#xff09; master-node-client架構 5、zabbix監控模式 二、部署za…

項目實戰 — 消息隊列(8){網絡通信設計①}

目錄 一、自定義應用層協議 &#x1f345; 1、格式定義 &#x1f345; 2、準備工作 &#x1f384;定義請求和響應 &#x1f384; 定義BasicArguments &#x1f384; 定義BasicReturns &#x1f345; 2、創建參數類 &#x1f384; 交換機 &#x1f384; 隊列 &#x1f38…

【網絡】傳輸層——TCP(滑動窗口流量控制擁塞控制延遲應答捎帶應答)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;專欄&#xff1a;《網絡》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交給時間&#xff01; 上篇文章對TCP可靠性機制講解了一部分&#xff0c;這篇文章接著繼續講解。 &#x1f3a8;滑動窗口 在…

Springboot 實踐(2)MyEclipse2019創建項目修改pom文件,加載springboot 及swagger-ui jar包

MyEclipse2019創建工程之后&#xff0c;需要添加Springboot啟動函數、添加application.yml配置文件、修改pom文件添加項目使用的jar包。 添加Springboot啟動函數 創建文件存儲路徑 &#xff08;1&#xff09;右鍵單擊“src/main/java”文件夾&#xff0c;彈出對話框輸入路徑…

Android 簡單的視頻、圖片壓縮工具

首頁需要壓縮的工具包 1.Gradle implementation com.iceteck.silicompressorr:silicompressor:2.2.3 2.添加相關權限&#xff08;手機得動態申請權限&#xff09; <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/> <uses-p…

05 - 研究 .git 目錄

查看所有文章鏈接&#xff1a;&#xff08;更新中&#xff09;GIT常用場景- 目錄 文章目錄 1. HEAD2. config3. refs4. objects 1. HEAD 2. config 3. refs 4. objects Git對象一共有三種&#xff1a;數據對象 blob、樹對象 tree以及提交對象 commit&#xff0c;這些對象都被保…

Vue 目錄結構 vite 項目

Vue3 項目常用的目錄結構和每個文件的作用【通過 vite 創建的項目】 vite目錄結構&#xff1a; dist // 打包后生成的文件目錄 node_modules // 環境依賴 public // 公共資源目錄 favicon.ico …

深入探析設計模式:工廠模式的三種姿態

深入探析設計模式&#xff1a;工廠模式的三種姿態 1. 簡單工廠模式1.1 概念1.2 案例1.3 優缺點 2. 抽象工廠模式2.1 概念2.2 案例&#xff1a;跨品牌手機生產2.3 優缺點 3. 超級工廠模式3.1 概念3.2 案例&#xff1a;動物園游覽3.3 優缺點 4. 總結 歡迎閱讀本文&#xff0c;今天…

go入門實踐四-go實現一個簡單的tcp-socks5代理服務

文章目錄 前言socks協議簡介go實現一個簡單的socks5代理運行與壓測抓包驗證 前言 SOCKS是一種網絡傳輸協議&#xff0c;主要用于客戶端與外網服務器之間通訊的中間傳遞。協議在應用層和傳輸層之間。 本文使用先了解socks協議。然后實現一個socks5的tcp代理服務端。最后&#…

英語詞法——代詞

代詞是用來代替名詞、起名詞作用的短語、分句和句子的詞。英語中代詞根據其意義和作用可分為九類:人稱代詞、物主代詞、反身代詞、相互代詞、指示代詞、疑問代詞、不定代詞、關系代詞和連接代詞。 第一節 人稱代詞 一、人稱代詞的形式和用法 人稱代詞單數復數第一人稱第二人…

【ARM 嵌入式 編譯系列 4 -- GCC 編譯屬性 __read_mostly 詳細介紹】

文章目錄 __read_mostly 介紹__read_mostly 在 linux 中的使用.data.read_mostly 介紹 __read_mostly 介紹 __read_mostly 是一個在Linux內核編程中用到的宏定義&#xff0c;這是一個gcc編譯器的屬性&#xff0c;用于告訴編譯器此變量主要用于讀取&#xff0c;很少進行寫入&am…

MYSQL中用字符串2022-07去匹配Date類型大于2022-07-01并小于2022-07-31

正文 需求上&#xff0c;是有個日期字符串&#xff0c;例如2022-07&#xff0c;代表著年月。數據庫中表對于這個字段存的是年月日&#xff0c;例如&#xff1a;2022-07-15。 我希望的是&#xff1a;獲取到2022-07-01到2022-07-31&#xff0c;之間的數據&#xff0c;條件是&…

21款美規奔馳GLS450更換中規高配主機,漢化操作更簡單

很多平行進口的奔馳GLS都有這么一個問題&#xff0c;原車的地圖在國內定位不了&#xff0c;語音交互功能也識別不了中文&#xff0c;原廠記錄儀也減少了&#xff0c;使用起來也是很不方便的。 可以實現以下功能&#xff1a; ①中國地圖 ②語音小助手&#xff08;你好&#xf…

【BASH】回顧與知識點梳理(二十六)

【BASH】回顧與知識點梳理 二十六 二十六. 二十一至二十五章知識點總結及練習26.1 總結26.2 模擬26.3 簡答題 該系列目錄 --> 【BASH】回顧與知識點梳理&#xff08;目錄&#xff09; 二十六. 二十一至二十五章知識點總結及練習 26.1 總結 Linux 操作系統上面&#xff0c…