赞
踩
实现思路:
创建一个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)即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。