当前位置:   article > 正文

uniapp:自定义底部导航栏_uniapp自定义底部tabbar

uniapp自定义底部tabbar

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"
			}
		]
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

4、main.js中引入store

import store from '@/utils/store.js'
const app = new Vue({
	...App,
	store
})
app.$mount()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/131556
推荐阅读