zoukankan      html  css  js  c++  java
  • 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(); 
    })
  • 相关阅读:
    在linux写一个shell脚本用maven git自动更新代码并且打包部署
    maven mvn 命令行 编译打包
    linux修改文件为可执行文件
    shell脚本中根据端口号kill对应的应用进程
    linux如何查看端口被哪个进程占用?
    LINUX中如何查看某个端口是否被占用
    The JAVA_HOME environment variable is not defined correctly的错误
    Linux配置Java环境变量
    requests
    https://www.cnblogs.com/zheting/category/1086753.html
  • 原文地址:https://www.cnblogs.com/meiyanstar/p/14047622.html
Copyright © 2011-2022 走看看