uview>tabbar组件
1、在pages.json中正常定义tabbar逻辑和字段,只需配置tabBar字段list中的pagePath(需以"/"开头)属性即可

"tabBar": { // 设置底部 tab 的表现
		"color": "#333333",
		"selectedColor": "#fa2c19",
		"borderStyle": "black",
		"backgroundColor": "#fff",
		"list": [{
				"pagePath": "pages/index/index"
			}, {
				"pagePath": "pages/category/category"
			}, {
				"pagePath": "pages/found/found"
			}, {
				"pagePath": "pages/cart/cart"
			}, {
				"pagePath": "pages/mine/mine"
			}
		]
	}

2、在各个tabbar页面引入u-tabbar组件,组件会默认自动通过uni.hideTabBar()隐藏系统tabbar

<!--> 在每个tabbar页面都引入u-tabbar组件,示例:index.vue页面-->
</template>
	<view>
		<u-tabbar :list="footerTabbar" :mid-button="true"></u-tabbar>
	</view>
</template>
<script>
	export default {
		data() {
			return {
				footerTabbar: this.$store.state.footerTabbar,//这样可以做到修改某一个页面的u-tabbar数据,其他页面的u-tabbar也能同步更新
			}
		}
	}
</script>

3、vuex:通过vuex引用同一份tabbar组件的list参数,这样可以做到修改某一个页面的u-tabbar数据,其他页面的u-tabbar也能同步更新
组件内部会自动处理各种跳转的逻辑,同时需要注意以下两点:
要在list参数中配置pagePath路径,此路径为pages.json中定义的tabbar字段的路径
此种方式,无需通过v-model绑定活动项,内部会自动进行判断和跳转

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
	state: {
		footerTabbar: [{
				iconPath: require('@/static/tabBar/tab_01.png'),
				selectedIconPath: require('@/static/tabBar/tab_02.png'),
				text: '首页',
				customIcon: false,
				pagePath: '/pages/index/index'
			},
			{
				iconPath: require('@/static/tabBar/tab_03.png'),
				selectedIconPath: require('@/static/tabBar/tab_04.png'),
				text: '分类',
				customIcon: false,
				pagePath: '/pages/category/category'
			},
			{
				iconPath: require('@/static/tabBar/tab_05.png'),
				selectedIconPath: require('@/static/tabBar/tab_06.png'),
				text: '发现',
				midButton: true,
				customIcon: false,
				pagePath: '/pages/found/found',
			},
			{
				iconPath: require('@/static/tabBar/tab_07.png'),
				selectedIconPath: require('@/static/tabBar/tab_08.png'),
				text: '购物车',
				customIcon: false,
				pagePath: '/pages/cart/cart',
			},
			{
				iconPath: require('@/static/tabBar/tab_09.png'),
				selectedIconPath: require('@/static/tabBar/tab_10.png'),
				text: '我的',
				customIcon: false,
				pagePath: '/pages/mine/mine',
			},
		],
	},
	mutations: {},
	actions: {}
})
export default store

4、main.js中引入store

import store from '@/utils/store.js'
const app = new Vue({
	...App,
	store
})
app.$mount()

效果图如下:
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐