【发布时间】:2020-11-06 05:43:55
【问题描述】:
某些组件需要为特定路由隐藏。我能够使用从这个 SO 问题 - Vuejs: Event on route change 中找到的路由更改观察器来实现这一点。我不想在 customizePage ( route - /customize )中显示标题和侧边栏。但是当我从该特定页面进行硬重新加载时会出现问题。这不会执行手表,因此它会失败。我发现的解决方案是在mounted()中也有它,这样它也可以在重新加载时执行。
但是在mounted 和watcher 中具有相同的功能看起来很奇怪。有没有更好的方法?
<template>
<div>
<TrialBanner v-if="$store.state.website.is_trial"/>
<div class="page-body-wrapper" :class="{ 'p-0' : isCustomizePage}">
<Sidebar :key="$store.state.user.is_admin" v-if="!isCustomizePage"/>
<div class="main-panel" :class="{ 'm-0 w-100' : isCustomizePage}">
<Header v-if="!isCustomizePage"/>
<div class="content-wrapper" :class="{ 'p-0' : isCustomizePage}">
<router-view :key="$store.state.websiteId"></router-view>
</div>
</div>
</div>
</div>
</template>
mounted() {
if(this.$route.path == '/customize') {
this.isCustomizePage = true;
} else {
this.isCustomizePage = false;
}
},
watch: {
$route (to, from){
if(this.$route.path == '/customize') {
this.isCustomizePage = true;
} else {
this.isCustomizePage = false;
}
}
}
【问题讨论】:
-
你应该考虑使用 vue-router 钩子而不是观察者:router.vuejs.org/guide/advanced/…。此外,如果您没有找到任何其他解决方案,将重复的代码分解为一个方法会更简洁:)
标签: javascript vue.js