在 $route 路径更改上有条件地显示 div 不起作用
conditionally show div on $route path change not working
我是 Vue 新手。我正在尝试有条件地显示基于路由器 link 的元素。如果 link 在 '/' 或 home 我想显示它,如果移动到任何其他 link 我想隐藏它。我尝试使用 watch 检查 $route 路径中的更改,但是我得到一个错误,它无法识别 this.$route。我想通过 v-if 和 v-else 触发一个变量来改变条件。这在我的 app.js 文件中。谢谢。
我收到错误 - App.vue?3dfd:89 未捕获(承诺)类型错误:this.$route.path 不是函数
在 Proxy.$route (App.vue?3dfd:89)
<template>
<div class="container">
<section class="projects">
<div class="toggleBtn">
<p v-if='home'>
<router-link to="/">projects</router-link> /
<router-link to="/experiments">experiments</router-link>
</p>
<p v-else>
<router-link class="back" to="/">BACK TO PROJECTS</router-link>
</p>
</div>
<router-view />
</section>
</div>
</template>
<script>
export default {
data() {
return {
home: true
}
},
mounted() {
this.animateTitle()
},
watch: {
$route(to, from) {
if (this.$route.path("/") || this.$route.path("/home")) {
this.home = true
} else {
this.home = false
}
}
},
methods: {
animateTitle() {}}
</script>
<style>
.toggleBtn {
position: relative;
width: 15vw;
margin-left: 78vw;
margin-top: 90vh;
border-radius: 20px;
z-index: 3;
}
.toggleBtn p {
font-family: 'Fantasque Italic';
line-height: 1;
white-space: nowrap;
font-size: 1.3rem;
}
.toggleBtn a {
text-decoration: none;
height: 20px;
color: rgb(141, 141, 141);
}
.toggleBtn a:hover {
text-decoration: line-through;
}
.toggleBtn a.router-link-exact-active {
color: black;
}
.back {
color: black;
}
</style>
您需要为此编写计算方法并检查计算方法
computed: {
currentRouteName() {
return this.$route.name;
}
}
您可以直接查看 div
更新:
Maavia 建议的更好答案应该如下所示:
添加计算属性
computed: {
isHome() {
return this.$route.path == "/" || this.$route.path == "/home";
}
}
然后在模板中检查它的值:
<p v-if='isHome'>
<router-link to="/">projects</router-link> /
<router-link to="/experiments">experiments</router-link>
</p>
检查 if 语句。
watch: {
$route(to, from) {
if (this.$route.path == "/" || this.$route.path == "/home" ) {
this.home = true
} else {
this.home = false
}
}
},
我是 Vue 新手。我正在尝试有条件地显示基于路由器 link 的元素。如果 link 在 '/' 或 home 我想显示它,如果移动到任何其他 link 我想隐藏它。我尝试使用 watch 检查 $route 路径中的更改,但是我得到一个错误,它无法识别 this.$route。我想通过 v-if 和 v-else 触发一个变量来改变条件。这在我的 app.js 文件中。谢谢。
我收到错误 - App.vue?3dfd:89 未捕获(承诺)类型错误:this.$route.path 不是函数 在 Proxy.$route (App.vue?3dfd:89)
<template>
<div class="container">
<section class="projects">
<div class="toggleBtn">
<p v-if='home'>
<router-link to="/">projects</router-link> /
<router-link to="/experiments">experiments</router-link>
</p>
<p v-else>
<router-link class="back" to="/">BACK TO PROJECTS</router-link>
</p>
</div>
<router-view />
</section>
</div>
</template>
<script>
export default {
data() {
return {
home: true
}
},
mounted() {
this.animateTitle()
},
watch: {
$route(to, from) {
if (this.$route.path("/") || this.$route.path("/home")) {
this.home = true
} else {
this.home = false
}
}
},
methods: {
animateTitle() {}}
</script>
<style>
.toggleBtn {
position: relative;
width: 15vw;
margin-left: 78vw;
margin-top: 90vh;
border-radius: 20px;
z-index: 3;
}
.toggleBtn p {
font-family: 'Fantasque Italic';
line-height: 1;
white-space: nowrap;
font-size: 1.3rem;
}
.toggleBtn a {
text-decoration: none;
height: 20px;
color: rgb(141, 141, 141);
}
.toggleBtn a:hover {
text-decoration: line-through;
}
.toggleBtn a.router-link-exact-active {
color: black;
}
.back {
color: black;
}
</style>
您需要为此编写计算方法并检查计算方法
computed: {
currentRouteName() {
return this.$route.name;
}
}
您可以直接查看 div
更新:
Maavia 建议的更好答案应该如下所示:
添加计算属性
computed: {
isHome() {
return this.$route.path == "/" || this.$route.path == "/home";
}
}
然后在模板中检查它的值:
<p v-if='isHome'>
<router-link to="/">projects</router-link> /
<router-link to="/experiments">experiments</router-link>
</p>
检查 if 语句。
watch: {
$route(to, from) {
if (this.$route.path == "/" || this.$route.path == "/home" ) {
this.home = true
} else {
this.home = false
}
}
},