【发布时间】:2020-01-12 17:53:53
【问题描述】:
我有一个 Vuex 状态属性,它存储一个布尔值,我用它来确定是显示还是隐藏导航栏。对于除登录页面之外的所有页面,导航栏都应该出现,因此我将默认值设置为 true。
export const state = () => ({
showNav: true
})
然后我有一个用于切换的突变。
export const mutations = {
toggleNav (state, show) {
state.showNav = show
}
}
在我的登录页面中,我致电toggleNav 以关闭导航栏。
export default {
mounted () {
this.$store.commit('toggleNav', false)
}
}
这符合预期,但有一个大问题;当我刷新登录页面时,我会看到导航栏一小会儿,直到 mount() 被调用。
有什么方法可以隐藏导航栏,使其不会短暂出现吗?我意识到我可以默认 showNav 为 false,然后在每个页面上调用 this.$store.commit('toggleNav', true),但这似乎很笨拙。
编辑:导航栏本身就是它自己的组件。
编辑2:我忘了补充一点,我需要能够在scrollY 超过某个值时动态显示导航栏,然后在scrollY 返回低于该值时再次隐藏它。我向所有回答的人道歉,因为没有更清楚地说明这一点。
【问题讨论】:
-
尝试使用
created钩子,因为它在生命周期的早期......或者如果您使用 vue-router,则可能是重新使用的 navigation guard(在 @987654332 内提交@守卫)。 -
@zer0kompression 这些都不起作用。我认为这些在生命周期中仍然发生得太晚了。
-
根据当前路由在导航栏组件上使用
v-if怎么样?所以像<navbar v-if="$route.path !== '/landing-page-path'"/>. -
@zer0kompression 查看我的第二次编辑。实际上,我确实曾经有过
v-if="$route.path !== '/landing-page-path'",但在页面加载后我无法让导航栏再次动态显示。