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.mzph.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…