控制tabbar的显示隐藏
1.常规的 tabbar
在uniapp中,使用 tabbar 模板创建的项目,可以在uni-app中实现 tabbar 管理。通过在pages.json里面配置底部导航栏,再通过在 page 根节点中添加tabbar,就可以实现 tabbar 的普通管理。但是有些时候,我们需要在特定的页面操作tabbar的显隐属性。
2.隐藏tabbar
通过在特定的页面里面添加以下代码,可以实现向用户隐藏底部tabbar:
onShow() {
this.$parent.globalData.showTabbar = false;
},
onHide() {
this.$parent.globalData.showTabbar = true;
},
在页面生命周期钩子函数中执行 $parent.globalData.showTabbar = false 就可以让 tabbar 隐藏。当你希望让 tabbar 再度显示时,执行 $parent.globalData.showTabbar = true。
3.显示tabbar
通过在特定的页面里面添加以下代码,可以实现向用户展示底部tabbar:
onShow() {
this.$parent.globalData.showTabbar = true;
},
onHide() {
this.$parent.globalData.showTabbar = false;
},
在页面生命周期钩子函数中执行 $parent.globalData.showTabbar = true 就可以让 tabbar 显示出来。当你希望让 tabbar 隐藏时,执行 $parent.globalData.showTabbar = false
4.在页面特定位置显示tabbar
有时候,我们希望在页面的特定位置显示tabbar。按照上面的方法,很容易实现 tabbar 的隐藏和显示。我们可以使用状态管理器来控制 tabbar 的显示和隐藏。
// 当页面进入/离开的时候,
onShow() {
this.$store.commit('SET_SHOW_TABBAR', true); // 显示tabbar
},
onHide() {
this.$store.commit('SET_SHOW_TABBAR', false); // 隐藏tabbar
},
我们在使用vuex状态管理的时候,需要将tabbar的显隐属性放到 state 中,mutations中定义控制tabbar的方法,同时在tab根目录下mounted生命周期中判断当前的路由路径,如果与底部菜单链接的路径相同则显示 showTabbar 为 true, 否则 showTabbar 为 false。
// store/state.js
const state = {
isLoading: false,
showTabbar: true,
}
// store/mutations.js
export const SET_LOADING_STATUS = (state, status) => {
state.isLoading = status
}
export const SET_SHOW_TABBAR = (state, status) => {
state.showTabbar = status
}
// root.vue
mounted() {
let pages = ['/pages/index/index', '/pages/list/list']
if (pages.includes(this.$route.path)) {
this.$store.commit('SET_SHOW_TABBAR', true)
} else {
this.$store.commit('SET_SHOW_TABBAR', false)
}
}
通过 state 来存储 tabbar 的显隐状态,mutations 中用于修改状态,root.vue 中用于判断路由路径,从而实现在页面特定位置显示 tabbar。