首页 > 其他分享 >Vue监听路由的变化

Vue监听路由的变化

时间:2023-10-13 09:33:40浏览次数:33  
标签:Vue route watch 组件 path 监听 路由

方式一:watch监听

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

watch:{
  $route(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是用来阻止“复用”的

<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

<script>
  // 引入 Tabbar组件
  import mTabbar from './components/Tabbar'
  import mTabbarItem from './components/TabbarItem'
  // 引入 vuex 的两个方法
  import {mapGetters, mapActions} from 'vuex'
 
  export default {
    name: 'app',
    // 计算属性
    computed:mapGetters([
      // 从 getters 中获取值
      'tabbarShow'
    ]),
    // 监听,当路由发生变化的时候执行
    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`
    },
    components:{
      mTabbar,
      mTabbarItem
    },
    data() {
      return {
        select:"Building"
      }
    }
  }
</script>

标签:Vue,route,watch,组件,path,监听,路由
From: https://www.cnblogs.com/songxia/p/17761147.html

相关文章

  • Django中关于路由匹配的源码分析
    1:关于路由#django中,路由的写法有很多,从最早一点几版本的url(xxxxx)的形式到后面re_path(xxxx),以及参考flask的path(xxxx)的格式。#无论是哪种,实现的功能本质上就是,匹配url和对应的额视图函数,换言之,就是,找到用户访问的url对应的视图函数,并且执行它。#下面是urls.p......
  • Skywalking APM监控系列(二、Mysql、Linux服务器与前端JS接入Skywalking监听)
    前言上篇我们介绍了Skywalking的基本概念与如何接入.NetCore项目,感兴趣可以去看看:SkywalkingAPM监控系列(一丶.NET5.0+接入Skywalking监听)本篇我们主要讲解一下Skywalking如何接入mysql数据库监听与Linux服务器的监听其实从Skywalking设计之初应该只是单独的链路跟踪,发......
  • 如何提供 或 访问 vuex 的数据、mutations
    目标:明确如何给仓库提供数据,如何使用仓库的数据一、提供数据:State提供唯一的公共数据源,所有共享的数据都要统一放到Store中的State中存储。在state对象中可以添加我们要共享的数据。 //state:状态,即数据,类似于vue组件中的data(区别:data是组件自己的数据,state是......
  • vue中v-bind绑定元素属性
    vue中v-bind绑定元素属性<html>  <head>  <metacharset="UTF-8">  <metaname="viewport"content="width=device-width,initial-scale=1.0">  <title>vue.js</title>  </head>  <b......
  • vue中的v-text指令和v-html指令区别
    <html>  <head>  <metacharset="UTF-8">  <metaname="viewport"content="width=device-width,initial-scale=1.0">  <title>vue.js</title>  </head>  <body>    &......
  • 【vue2】实现css动效逐个顺序展示的效果(简陋版)
    效果(进入预约里程碑模块后,小人从第一个台阶逐个闪烁出现在当前预约等级之前的台阶并消失,最终停留在当前预约等级的台阶上): 虽然很low但是!就是这么设计的!于是在原本静态的代码上稍加了些修改(为什么,为什么,想问天问大地)首先是台阶部分的代码:<div:class="$style.reserveBox......
  • vue中下载excel文件4种方法,2、通过 a 标签 download 属性结合 blob 构造函数下载发送p
    vue中下载excel文件4种方法,2、通过a标签download属性结合blob构造函数下载发送post请求和后台poi返回文件流实现下载1、通过url下载即后端提供文件的地址,直接使用浏览器去下载通过window.location.href=文件路径下载window.location.href=`${location.origin}/opera......
  • Vue报错Syntax Error:TypeError: this.getOptions is not a function的解决方法~
    前几天在vue运行项目过程中报错了,这个方法是关于Vue报错SyntaxError:TypeError:this.getOptionsisnotafunction的解决方法(1)报错一(2)报错二~1.1问题分析首先,检查代码,并没有什么错误的地方;其次,涉及到这个问题,可能就是版本原因了,安装的sass-loader版本太高,卸载安装低......
  • vuex 的使用
    vuex是一个插件,可以帮我们管理vue通用的数据(多组件共享的数据) 应用场景:1.某个状态在很多个组件来使用(个人信息)2.多个组件共同维护一份数据(购物车) vuex的优势:1.共同维护一份数据,数据集中化管理2.响应式变化3.操作简洁(vuex提供了一些辅助函数)  vuex的使......
  • Spring Boot 监听 Redis Key 失效事件实现定时任务
    1、业务场景我们以订单功能为例说明下:生成订单后一段时间不支付订单会自动关闭。最简单的想法是设置定时任务轮询,但是每个订单的创建时间不一样,定时任务的规则无法设定,如果将定时任务执行的间隔设置的过短,太影响效率。还有一种想法,在用户进入订单界面的时候,判断时间执行相关操作。......