watch监听路由变化详解

一、watch监听路由的方法

通过watch监听,当路由发生变化的时候执行。

方法一:

watch:{
  $router(to,from){
       console.log(to.path)
  }
}

方法二:

watch: {
   $route: {
     handler:  function (val, oldVal){
       console.log(val);
     },
     // 深度观察监听
     deep:  true
   }
},

方法三:

watch: {
   '$route' : 'getPath'
},
methods: {
   getPath(){
     console.log( this .$route.path);
   }
}

二、key-用来阻止“复用”的

Vue 为你提供了一种方式来声明“这两个元素是完全独立的——不要复用它们”。只需添加一个具有唯一值的 key 属性即可(Vue文档原话)

<router-view :key= "key" ></router-view>
 
computed: {
   key() {
     return  this .$route.name !== undefined?  this .$route.name + new  Date():  this .$route + new  Date()
   }
}

使用computed属性和Date()可以保证每一次的key都是不同的,这样就可以如愿刷新数据了。

三、全局监听路由(通过vue-router的钩子函数beforeRouteEnter/beforeRouteUpdate/beforeRouteLeave)

一般会在router里面加跳转验证才会用到这个方法

方法一:

watch:{
       $route(to,from){
         if (to.path ==  '/'  || to.path ==  '/Prisoner'  || to.path ==  '/Goods'  || to.path ==  '/Time'  || to.path ==  '/Mine' ){
           /**
            * $store来自Store对象
            * dispatch 向 actions 发起请求
            */
           this .$store.dispatch( 'showTabBar' );
         } else {
           this .$store.dispatch( 'hideTabBar' );
         }
       }
     },
     beforeRouteEnter (to, from, next) {
       // 在渲染该组件的对应路由被 confirm 前调用
       // 不!能!获取组件实例 `this`
       // 因为当钩子执行前,组件实例还没被创建
     },
     beforeRouteUpdate (to, from, next) {
       // 在当前路由改变,但是该组件被复用时调用
       // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
       // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
       // 可以访问组件实例 `this`
     },
     beforeRouteLeave (to, from, next) {
       // 导航离开该组件的对应路由时调用
       // 可以访问组件实例 `this`
     },

 

方法二:

在app.vue的create中加入下面代码,然后进行判断

this.$router.beforeEach((to ,from,next) =>{
       console.log(to);
       next(); 
})

 

posted @ 2020-11-27 14:05  小那  阅读(9501)  评论(0编辑  收藏  举报