uniapp 开发小程序之实现不同身份展示不同的 tabbar(底部导航栏),附带相关问题解答

效果展示:

 

引言

在开发过程中逐渐意识到uniapp原生的tabbar可能不能满足开发要求,通过浏览博客才选择使用uView的Tabbar 底部导航栏来实现,我选择用的是2X版本

安装

我是使用Hbuilder插件的方式引入的组件库,安装配置可以看这篇:

下载安装方式配置 | uView 2.0 - 全面兼容nvue的uni-app生态框架 - uni-app UI框架

插件市场:

uView2.0重磅发布,利剑出鞘,一统江湖 - DCloud 插件市场

现在就开始现实需求

  • 首先在pages.json中定义文件路径:
"pages": [{"path": "pages/xxx/xxx","style": {"navigationBarTitleText": "","enablePullDownRefresh": false}},{//消息"path": "pages/xxx/xxx"},{"path": "pages/xxx/xxx","style": {"navigationBarTitleText": "xxxx"}},{"path": "pages/xxx/xxx","style": {"navigationBarTitleText": "","enablePullDownRefresh": false}},{xxxxxxxxxxxxxxxxxxxxxx }]
	"tabBar": {"height":"1px",// 配置选中颜色"selectedColor": "#22bf8e","color": "#f8f8f8", // 设置为与背景颜色相同"backgroundColor": "transparent", // 设置为透明// list 每一项"list": [{"pagePath": "pages/xxx/xxx"},{"pagePath": "pages/xxx/xxx"},{"pagePath": "pages/xxx/xxx"},{"pagePath": "pages/xxx/xxx"},{"pagePath": "xxxxxxxxxxxxxx"}]}

配置pages.josn中tabBar的原因:是因为要根据uni.switchTab来跳转页面,而uni.switchTab能够跳转是需要在tabBar中定义pagePath的

tabbar底部栏过多怎么办:pages.josn中tabBar最多只能定义五个,如果超出就不能使用uni.switchTab跳转了,需要用uni.switchTab跳转,不过这两种跳转的效果是不同的,具体需要按照实际情况

  • 然后定义一个tabbar.js
//身份一
let tab1 = [{"text": "消息","pagePath": "pages/xxx/xxx","iconPath": "../static/xxx/xxx","selectedIconPath": "../static/xxx/xxx"},{"text": "消息","pagePath": "pages/xxx/xxx","iconPath": "../static/xxx/xxx","selectedIconPath": "../static/xxx/xxx"},{"text": "消息","pagePath": "pages/xxx/xxx","iconPath": "../static/xxx/xxx","selectedIconPath": "../static/xxx/xxx"},{"text": "消息","pagePath": "pages/xxx/xxx","iconPath": "../static/xxx/xxx","selectedIconPath": "../static/xxx/xxx"}
]
// 身份二
let tab2 = [{"text": "消息","pagePath": "pages/xxx/xxx","iconPath": "../static/xxx/xxx","selectedIconPath": "../static/xxx/xxx"},{"text": "消息","pagePath": "pages/xxx/xxx","iconPath": "../static/xxx/xxx","selectedIconPath": "../static/xxx/xxx"},{"text": "消息","pagePath": "pages/xxx/xxx","iconPath": "../static/xxx/xxx","selectedIconPath": "../static/xxx/xxx"},{"text": "消息","pagePath": "pages/xxx/xxx","iconPath": "../static/xxx/xxx","selectedIconPath": "../static/xxx/xxx"}
]
export default [tab1,tab2
]
  • 然后在app.vue中登录,根据身份进行判断赋值,localStorage.set()我是封装的uni.setStorageSync方法
import tabBar from '@/utils/tabbar.js'if(xxxx){
localStorage.set('tabBar', tabBar[0])
}else if(xxx){
localStorage.set('tabBar', tabBar[1])
}
  • 然后在app.vue中隐藏掉原生tabbar
onLaunch: function() {uni.hideTabBar()console.log('App onLaunch')},
onShow: function() {uni.hideTabBar()console.log('App Show')}
  • 然后定义一个tabbar组件
<template><view><u-tabbar class="tabbar-ios-fix" activeColor='#22bf8e' :value="current?current:0" :fixed="true":placeholder="true" :safeAreaInsetBottom="true" @change="handleTabClick"><u-tabbar-item v-for='(item,index) in tabList' :key="index" :text="item.text"><image slot="inactive-icon" class="u-page__item__slot-icon" :src="item.iconPath"></image><image slot="active-icon" class="u-page__item__slot-icon" :src="item.selectedIconPath"></image></u-tabbar-item></u-tabbar></view>
</template><script>import localStorage from '@/utils/localStorage.js'export default {props: {current: Number},data() {return {tabList: localStorage.get('tabBar')};},mounted() {console.log(this.tabList)},methods: {handleTabClick(index) {console.log(index)if (index >= 3) {console.log('切换到我的')switch (index) {case 3:uni.navigateTo({url: '/pages/mine/mine',});break;}return}// 使用 uni.switchTab 方法切换页面uni.switchTab({url: '/' + this.tabList[index].pagePath,});},}}
</script><style lang="scss">.u-page__item__slot-icon {width: 50rpx;height: 50rpx;}.tabbar-ios-fix {bottom: calc(120rpx + env(safe-area-inset-bottom));}
</style>

u-tabbar解惑:

一、如需要自定义图标/颜色,在u-tabbar-item标签中使用插槽active-iconinactive-icon来定义图标和颜色

二、可以通过.u-page__item__slot-icon修改图标大小

三、不在pages.josn中定义list,可通过switch判断,用uni.navigateTo跳转

四、其他属性可查看官网:

Tabbar 底部导航栏 | uView 2.0 - 全面兼容nvue的uni-app生态框架 - uni-app UI框架

  • 然后开始使用tabbar组件 ,正常引用、注册、使用就行
<tabbar :current="0"></tabbar>import tabbar from "@/components/tabbar.vue"
export default {components: {tabbar}
}

注意:哪里需要底部栏,就在哪几个页面引入、注册、使用


其中遇到一个机型问题,苹果手机预览,底部还是会出现一段白底,如何解决?

其实也很简单,在每个使用了tabbar组件的页面中也单独定义隐藏原生tabbar的方法,如下代码

onLoad() {uni.hideTabBar()
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/271.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【用户认证】密码加密,用户状态保存,cookie,session,token

相关概念 认证与授权 认证&#xff08;authentication &#xff09;是验证你的身份的过程&#xff0c;而授权&#xff08;authorization&#xff09;是验证你有权访问的过程 用户认证的逻辑 获取用户提交的用户名和密码根据用户名&#xff0c;查询数据库&#xff0c;获得完…

【DBA专属】MHA高可用数据库集群-----------一主一备两从一管理,一个VIP客户端

MHA高可用数据库集群 目录 环境配置&#xff1a; 所有操作系统均为centos 7.x 64bit 1、关闭防火墙&#xff1a;&#xff08;所有服务器&#xff09; 2.配置所有主机名映射&#xff08;所有服务器&#xff09; 3、同步时区 4.安装MHA node及相关perl依赖包&#xff08;所有…

使用HHDESK图形化功能管理服务器

服务器的管理通常繁琐而枯燥&#xff0c;需要大量的命令行来执行。 所以图形化功能应运而生。 本篇以传输文件为例&#xff0c;简单介绍一下HHDESK的图形化管理功能。 首先需要配置好服务器。 点击连接管理&#xff0c;在连接类型中选择SSH&#xff0c;按照刚才在服务器中配…

Android应用程序开发需要哪些编程语言?

开发一款Android上的应用程序通常需要以下编程语言&#xff1a; Java&#xff1a;Java是Android开发的主要编程语言。几乎所有的Android应用程序都使用Java进行核心开发。你可以使用Java编写应用程序的业务逻辑、界面设计和数据处理等。 刚好我这里有嵌入式、plc、单片机的资料…

【NAS群晖drive异地访问】远程连接drive挂载电脑硬盘「内网穿透」

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 转发自CSDN远程穿透的文章&#xff1a;【…

哈工大计算机网络课程网络层协议详解之:DHCP协议

哈工大计算机网络课程网络层协议详解之&#xff1a;DHCP协议 文章目录 哈工大计算机网络课程网络层协议详解之&#xff1a;DHCP协议如何获得IP地址&#xff1f;硬编码动态主机配置协议-DHCP&#xff1a;&#xff08;Dynamic Host Configuration Protocol&#xff09; 动态主机配…

Docker学习笔记1

PaaS&#xff1a; 一、虚拟化分类&#xff1a; 虚拟化资源提供者&#xff1a; 1&#xff09;硬件平台虚拟化 2&#xff09;操作系统虚拟化 虚拟化实现方式&#xff1a; type I: 半虚拟化 type II&#xff1a;硬件辅助全虚拟化 type III&#xff1a; 软件全虚拟化&#xff1a; …

【②MySQL 】:测试数据准备、SQL语句规范与基本操作

前言 欢迎来到小K的MySQL专栏&#xff0c;本节将为大家准备MySQL测试数据、以及带来SQL语句规范、数据库的基本操作的详细讲解~✨文末送书&#xff0c;小K赠书活动第二期 目录 前言一、准备测试数据二、SQL语句规范三、数据库的基本操作四、总结&#xff1a;文末赠书 一、准备测…

影响远程访问性能的潜在因素

对企业和远程办公人员而言&#xff0c;远程访问技术非常关键。因为通过这项技术&#xff0c;员工可以随时随地使用任意设备工作&#xff0c;可以提高生产力和灵活性。 但是&#xff0c;远程访问性能可能会受到多种因素的影响。这篇文章将介绍影响远程访问性能的各种潜在因素&a…

弟子规 古译今 详解

博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c;还请读者海涵指正。☕&#x1f36d; 《MYSQL从入门到精通》数据库是开发者必会基础之…

GPT-4:AI的新突破,重塑芯片设计领域

随着人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;其在各个领域的应用也日益广泛。最近&#xff0c;纽约大学Tandon工程学院的研究人员利用OpenAI的GPT-4模型&#xff0c;成功设计出了一个芯片&#xff0c;这标志着AI在硬件设计领域的重大突破。 GPT-4通过简单的英…

web存储(Storage)

目录 1、基本概念 2、功能监测 2.1 测试可用性 2、W3C标准 3、基本方法或属性 4、 Local Storage 4.1 描述 4.2 示例 5、sessionStorage 5.1 描述 5.2 示例 6、StorageEvent&#xff08;存储事件&#xff09; 6.1 构造函数 6.2 实例属性 6.3 实例方法 6.4 响应…