1.component/tarbar.vue
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 49 50 51 52 53
| <template> <view> <u-tabbar :active="useStore.activeTab" :fixed="true" :placeholder="true" :safeAreaInsetBottom="true"> <u-tabbar-item v-for="(item, index) in tabbarItems" :key="index" :icon="getTabbarIcon(item, index)" :text="item.text" @click="handleTabbarItemClick(item, index)"> </u-tabbar-item> </u-tabbar> </view> </template>
<script setup> //引入pinia仓库 import useTarBarStore from '@/store/tarbar.js' let useStore = useTarBarStore()
const tabbarItems = [{ pagePath: '/pages/index/index', text: '首页', iconPath: '/static/tabBar/home.png', selectedIconPath: '/static/tabBar/home.png' }, { pagePath: '/pages/categories/categories', text: '分类', iconPath: '/static/tabBar/category.png', selectedIconPath: '/static/tabBar/category.png' }, { pagePath: '/pages/found/found', text: '发现', iconPath: '/static/tabBar/found.png', selectedIconPath: '/static/tabBar/found.png' } ] //点击tabbar按钮 const handleTabbarItemClick = (item, index) => { //如果点击了别的tarbar按钮 if (useStore.activeTab !== index) { //设置新按钮 useStore.setActive(index) const path = item.pagePath //uniapp的官方api,切换页面,这个path必须是tarbar的path uni.switchTab({ url: path })
} } //图标的切换,就是点击之后图标会切换,如果有需求可以看看 const getTabbarIcon = (item, index) => { return useStore.activeTab === index ? item.selectedIconPath : item.iconPath } </script>
|
配置点击之后的事件,按钮的切换,路由的切换。可以看到按钮的索引是保存在pinia
的,因为是全局的。
2.创建pinia仓库
store/tarbar.js
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import { defineStore } from 'pinia'
const useTarbarStore = defineStore('Tarbar', { state: () => { return { activeTab: 1 } }, actions: { setActive(active) { this.activeTab = active } } })
export default useTarbarStore
|
这个active是tarbar来标识索引的,不同tarbar有唯一的active。
3.配置tarbar路径
之前在tarbar.vue
配置的是要跳转的路径,这里配置真正的路径。在page.json
新增一个tarbar
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| { "tabBar": { "color": "#333333", "selectedColor": "#fa2c19", "borderStyle": "black", "backgroundColor": "#fff", "list": [{ "pagePath": "pages/index/index" }, { "pagePath": "pages/categories/categories" }, { "pagePath": "pages/found/found" }] } }
|
只需要路径即可,其他自行DIY。
4.引入tarbar
在需要使用的页面引入tabbar组件:
1 2 3 4 5 6
| <template> <view> <!-- 引入导航栏tabbar组件 --> <tabbar></tabbar> </view> </template>
|
隐藏pages.json
里配置的导航栏,使用封装的tabbar组件,在App.vue
根组件中编辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <script> export default { onLaunch: function() { console.log('App Launch') }, onShow: function() { console.log('App Show') //⭐隐藏pages.json里配置的导航栏,使用封装的tabbar组件 uni.hideTabBar({ animation: false }) }, onHide: function() { console.log('App Hide') } } </script>
|