在我的主页上,我有下拉菜单,显示v-show=通过点击链接@click = "show=!当我改变路由时,我想设置show=false。请告诉我如何实现这件事。


当前回答

import {useRouter} from vue-router;

useRouter();

路由器。afterEach((to, from) => {});

其他回答

import {useRouter} from vue-router;

useRouter();

路由器。afterEach((to, from) => {});

如果有人正在寻找如何在Typescript中做到这一点,这里是解决方案:

@Watch('$route', { immediate: true, deep: true })
onUrlChange(newVal: Route) {
    // Some action
}

是的,正如下面@Coops提到的,请不要忘记包括:

import { Watch } from 'vue-property-decorator';

编辑: Alcalyn提出了一个很好的观点,使用Route type而不是any:

import { Watch } from 'vue-property-decorator';    
import { Route } from 'vue-router';

在组件的$route上设置一个监控器,如下所示:

watch:{
    $route (to, from){
        this.show = false;
    }
} 

它观察路由变化,当路由变化时,将show设置为false

使用Vue路由器是另一种方法,在你的组件中使用beforeRouteLeave after方法,如下所示:

<template>
   <button @click="ShowMethod">DisplayButton</button>
</template>
<script>
  data() {
    return { show: true };
   },
   methods: {
   ShowMethod() {
   this.show = false;
    }
   },
   beforeRouteLeave(to, from, next) {
   this.show = false;
   next();
 }
</script>

根据VueJs的文档,它被称为导航警卫,检查下面的链接:

导航警卫

左护常用于防止使用者意外 留下未保存编辑的路由。可以取消导航 通过调用

在组件警卫:

beforeRouteEnter beforeRouteUpdate beforeRouteLeave

  beforeRouteLeave(to, from, next) {
// called when the route that renders this component is about to
// be navigated away from.
// has access to `this` component instance.
 }

查看下面的链接了解更多信息:

在组件警卫

typescript用户的另一个解决方案:

import Vue from "vue";
import Component from "vue-class-component";

@Component({
  beforeRouteLeave(to, from, next) {
    // incase if you want to access `this`
    // const self = this as any;
    next();
  }
})

export default class ComponentName extends Vue {}