当前位置: 首页 > news >正文

Vue中监听路由参数变化的几种方式

目录

一. 路由监听方式: 通过 watch 进行监听

1. 监听路由从哪儿来到哪儿去

2. 监听路由变化获取新老路由信息

3.  监听路由变化触发方法

4. 监听路由的 path 变化

5. 监听路由的 path 变化, 使用handler函数

6. 监听路由的 path 变化,触发methods里的方法 

二. 路由监听方式:key是用来阻止“复用”的

三. 路由监听方式:通过vue-router的钩子函数

1. 组件内监听

2. 全局监听路由

🔽 参考资料


vue页面开发中,我们经常需要根据路由的变化去实现一些操作,那么vue.js中如何监听路由的变化呢?监听路由变化的方法都有哪些?这篇文章主要介绍了vue监听路由变化的几种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教 

——👇 vue中路由参数的变化监听,这里总结了常用的几种方式 👇——

一. 路由监听方式: 通过 watch 进行监听

1. 监听路由从哪儿来到哪儿去

返回 “从哪里来” 和 “哪里去” 的路由信息

// 方式1、监听路由 $route 变化
export default{watch: { // 监听,当路由发生变化的时候执行$route(to, from){console.log('路由变化了')console.log('当前页面路由:' + to);console.log('上一个路由:' + from);// console.log(from.path); // 从哪来// console.log(to.path); // 到哪去},}
}

2. 监听路由变化获取新老路由信息

返回 “新” “老” 路由信息

// 方式2、监听路由 $route 变化, 使用handler函数
export default{watch: { // 监听,当路由发生变化的时候执行'$route': { // $route可以用引号,也可以不用引号handler(to, from){console.log('路由变化了')console.log('当前页面路由:' + to); //新路由信息console.log('上一个路由:' + from); //老路由信息},deep: true, // 深度观察监听immediate: true, // 第一次初始化渲染就可以监听到}}
}

如果我们需要在最初绑定值的时侯,也执行监听函数,则就需要用到immediate属性。

✔️ 当设置immediate属性为true时,无论值是否发生改变,时刻都会监听;

✔️ 当设置immediate属性为false时,常规用法,只有值发生改变才会监听。

参考:Vue中watch(监听器)的用法详解(通俗易懂,简单明了)


3.  监听路由变化触发方法

// 方式3、监听路由 $route 变化,触发methods里的方法
export default{watch: { // 监听,当路由发生变化的时候执行'$route':'getPath'},methods: {getPath(){console.log(this.$route.path);}}}

4. 监听路由的 path 变化

// 方式4、监听路由的 path 变化
export default{watch: { // 监听,当路由发生变化的时候执行'$route.path'(toPath, fromPath){console.log('路由变化了')console.log('当前页面路由地址:' + toPath)console.log('上一个路由地址:' + fromPath)},}
}

5. 监听路由的 path 变化, 使用handler函数

// 方式5、监听路由的 path 变化, 使用handler函数
export default{watch: { // 监听,当路由发生变化的时候执行'$route.path': {handler(toPath, fromPath){console.log('路由变化了')console.log('当前页面路由地址:' + toPath)console.log('上一个路由地址:' + fromPath)},deep: true, // 深度监听immediate: true, // 第一次初始化渲染就可以监听到}}
}

6. 监听路由的 path 变化,触发methods里的方法 

// 方式6、监听路由的 path 变化,触发methods里的方法
export default{watch: { // 监听,当路由发生变化的时候执行'$route.path': 'getpath'},methods: {getpath(){console.log('路由变化了')}}
}

二. 路由监听方式: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的钩子函数

1. 组件内监听

❓ 如何在组件中监听路由参数的变化?❓

当使用路由参数时,例如从 /user/foo 导航到 /user/bar,原来的组件实例会被复用。

因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。

那如果我们要在组件中监听路由参数的变化,就只能通过watch (监测变化) $route 对象,或使用 beforeRouteUpdate 的组件内守卫。

方式一: 通过watch 监听 $route
 

const User = {template: '...',watch: {$route(to, from) {// 对路由变化作出响应...}}
}

方式二:通过组件内的导航守卫

beforeRouteUpdate ,(和created(){}生命周期函数同级别)

const User = {template: '...',beforeRouteUpdate(to, from, next) {// react to route changes...// don't forget to call next()}
}

⏬ 通过vue-router的组件内钩子函数beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave进行监听

示例1:

export default{// 监听,当路由发生变化的时候执行beforeRouteEnter(to, from, next){// 在渲染该组件的对应路由被确认前调用这个钩子,// 不!能!获取组件实例 `this`// 因为当钩子执行前(也就是说,我们使用的是进入路由之前的钩子),那时组件实例还没被创建,所以不能获取this,自然这里就不能使用thisconsole.log(this) // 结果为:undefinedconsole.log('beforeRouteEnter')next()},// 监听,当路由发生变化的时候执行beforeRouteUpdate(to, from, next){// 在当前路由改变,但是该组件被复用时调用// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。// 可以访问组件实例 `this`console.log(this) // 可以访问thisconsole.log('beforeRouteUpdate')next()},// 监听,当路由发生变化的时候执行beforeRouteLeave(to, from, next){// 导航离开当前路由的时候被调用,this可以被访问到console.log(this) // 可以访问组件实例 `this`console.log('beforeRouteLeave')next()},
}

示例2: 

<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>

2. 全局监听路由

⏬ 通过vue-router的全局钩子函数beforeEach——this.$router.beforeEach

// 方式1、在App.vue的create中进行全局路由监听
export default  {name:  'App',created() {this.$router.beforeEach((to, from, next) => {console.log(to);console.log(from);next()})}
}
// 方式2、在路由文件(/router/index.js)中进行全局路由监听
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)let routes = [{path: '/login',component: resolve => require(['@/views/login'], resolve),},
]let router = new Router({mode: 'history', // 去掉 url 中的 #scrollBehavior: () => ({ y: 0 }),base: process.env.VUE_APP_BASE_DOMAIN,routes,
})router.beforeEach((to, from, next) => {console.log(to);console.log(from);next()
})export {routesrouter
}

🔽 参考资料

  • Vue监听路由变化的几种方式小结
  • Vue.js怎么监听路由变化
  • Vue路由监听的方式
  • Vue几种监听路由变化的方式

相关文章:

Vue中监听路由参数变化的几种方式

目录 一. 路由监听方式&#xff1a; 通过 watch 进行监听 1. 监听路由从哪儿来到哪儿去 2. 监听路由变化获取新老路由信息 3. 监听路由变化触发方法 4. 监听路由的 path 变化 5. 监听路由的 path 变化, 使用handler函数 6. 监听路由的 path 变化&#xff0c;触发method…...

angular——子组件如何接收父组件的动态传值

开发过程中&#xff0c;父组件给子组件传值的情况很常见&#xff0c;今天我们就来聊聊父组件给子组件传值可能会发生哪些意外&#xff0c;什么情况下子组件无法接收到父组件最新的传值&#xff1b; 传值情况&#xff1a; 基本数据类型&#xff1a;父组件给子组件传递 基本数据…...

php 桥接模式

一&#xff0c;桥接模式&#xff0c;是结构设计模式的一种&#xff0c;其将抽象部分和实现部分分离开来&#xff0c;使两部分可以独立的进行修改&#xff0c;提高系统的灵活性。在桥接模式中&#xff0c;需要定义一个抽象类和一个实现类&#xff0c;通过将实现类注入到抽象类中…...

Android 13 Hotseat定制化修改——004 hotseat布局位置

目录 一.背景 二.原生hotseat布局位置 三.修改Hotseat布局位置 一.背景 由于需求是需要自定义修改Hotseat,所以此篇文章是记录如何自定义修改hotseat的,应该可以覆盖大部分场景,修改点有修改hotseat布局方向,hotseat图标数量,hotseat图标大小,hotseat布局位置,hotseat…...

海外版金融理财系统源码 国际投资理财系统源码 项目投资理财源码

海外版金融理财系统源码 国际投资理财系统源码 项目投资理财源码...

洛谷P1162 - 填涂颜色

题目描述 由数字 0 0 0 组成的方阵中&#xff0c;有一任意形状闭合圈&#xff0c;闭合圈由数字 1 1 1 构成&#xff0c;围圈时只走上下左右 4 4 4 个方向。现要求把闭合圈内的所有空间都填写成 2 2 2。例如&#xff1a; 6 6 6\times 6 66 的方阵&#xff08; n 6 n6 n6&…...

设计模式十一:外观模式(Facade Pattern)

外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它提供了一个统一的接口&#xff0c;用于访问系统中的一组复杂子系统。外观模式通过将复杂子系统的接口封装在一个高层接口中&#xff0c;简化了客户端与子系统之间的交互&#xff0c;使得客户…...

GIS和倾斜摄影的关系?

GIS&#xff08;地理信息系统&#xff09;和倾斜摄影是两种在地理空间数据处理和分析中扮演重要角色的技术。但是我们总是会分不清二者&#xff0c;本文就带大家从不同角度了解二者之间的关系。 概念 GIS是一种用来捕获、存储、分析和展示地理空间数据的技术&#xff0c;它可以…...

【CI/CD】图解六种分支管理模型

图解六种分支管理模型 任何一家公司乃至于一个小组织&#xff0c;只要有写代码的地方&#xff0c;就有代码版本管理的主场&#xff0c;初入职场&#xff0c;总会遇到第一个拦路虎 git 管理流程&#xff0c;但是每一个企业似乎都有自己的 git 管理流程&#xff0c;倘若我们能掌握…...

LeetCode105. 从前序与中序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树 文章目录 [105. 从前序与中序遍历序列构造二叉树](https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/)一、题目二、题解 一、题目 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preo…...

编码技巧——Sentinel的blockHandler与fallback

本文介绍Sentinel的blockHandler与fallback的区别&#xff0c;背景是&#xff1a;发生限流时&#xff0c;配置的sentinel的blockhandler没有生效而fallback生效了&#xff1b;排查原因&#xff0c;从而给出Sentinel配置异常降级和限流降级的代码写法&#xff1b; 在查看源码前…...

最新成果展示:GaN基Micro-LED热学模型数据库的开发及应用

由于GaN基Micro-LED表面积-体积比增加&#xff0c;其在热学方面的性质有别于大尺寸的LED&#xff0c;如缺陷复合导致的热效应将在发光区域中产生诸多“热”点&#xff0c;导致发光波长不均匀&#xff0c;这将影响后期显示系统的成像稳定性。针对上述问题&#xff0c;天津赛米卡…...

【Vue3】动态组件

动态组件的基本使用 动态组件&#xff08;Dynamic Components&#xff09;是一种在 Vue 中根据条件或用户输入来动态渲染不同组件的技术。 在 Vue 中使用动态组件&#xff0c;可以使用 元素&#xff0c;并通过 is 特性绑定一个组件的名称或组件对象。通过在父组件中改变 is 特…...

Java超级玛丽小游戏制作过程讲解 第五天 创建并完成常量类04

//加载障碍物 try {obstacle.add(ImageIO.read(new File(path"brick.png")));obstacle.add(ImageIO.read(new File(path"soil_up.png")));obstacle.add(ImageIO.read(new File(path"soil_base.png"))); } catch (IOException e) {e.printStackTr…...

设置浏览器兼容

浏览器兼容 css兼容 cursor定义手型  Firefox不支持hand&#xff0c;IE支持pointer  解决方法&#xff1a;统一使用pointercss透明  IE&#xff1a;filter:progid:DXImageTransform.Microsoft.Alpha(style0,opacity60)  Firefox&#xff1a;opacity&#xff1a;0.6  解决…...

Java # List

ArrayList<>() import java.util.ArrayList; // 引入 ArrayList 类ArrayList<E> objectName new ArrayList<>();  // 初始化 常用方法 方法描述add()将元素插入到指定位置的 arraylist 中addAll()添加集合中的所有元素到 arraylist 中clear()删除 arrayl…...

git原理与使用

目录 引入基本操作分支管理远程操作标签管理 引入 假设你的老板要你设计一个文档&#xff0c;当你设计好了&#xff0c;拿给他看时&#xff0c;他并不是很满意&#xff0c;就要你拿回去修改&#xff0c;你修改完后&#xff0c;再给他看时&#xff0c;他还是不满意&#xff0c;…...

【C语言题解】将一句话的单词进行倒置,标点不倒置。

题目描述&#xff1a;将一句话的单词进行倒置&#xff0c;标点不倒置。比如 “I like beijing.”&#xff0c;经过处理后变为&#xff1a;“beijing. like I”。 文章目录 原题目题目描述&#xff1a;输入描述&#xff1a;输出描述&#xff1a;题目链接&#xff1a; 整体思路分…...

Postman 的简单使用

什么是Postman 在程序开发中用于调试网络程序或者跟踪网页请求。可以对网页进行简单的基本信息调试。Postman最早是作用chrome浏览器插件存在的&#xff0c;但是2018年初Chrome停止对Chrome应用程序的支持。所以现在Postman提供了独立的安装包&#xff0c;不再依赖于Chrome浏览…...

在CentOS7安装部署GitLab服务

CentOS 7 安装 Gitlab 官方安装教程&#xff1a;https://about.gitlab.com/install/ 参考安装教程&#xff1a;https://developer.aliyun.com/article/74395 安装配置 Step1&#xff1a;配置yum源 vim /etc/yum.repos.d/gitlab-ce.repo存入以下内容&#xff1a; [gitlab-c…...

50| 选数

#include <bits/stdc.h> using namespace std;int n, k, ans, sum; // ans 最终答案 const int N 23; int a[N]; bool st[N];bool isprime(int x) {if (x < 1) return false;for (int i 2; i < sqrt(x); i)if (x % i 0) return false;return true; }void dfs(…...

2026春SDU软件创新实训第四周个人工作总结

第四周我做的工作总结如下&#xff1a; 从原始网页爬取科一科四题库 书接上期&#xff0c;我们找到了两个网页的题库&#xff08;驾照吧&#xff08;https://www.jiazhaoba.com/tiba&#xff09;元贝驾考&#xff08;https://www.ybjk.com/tiku&#xff09;&#xff09;&…...

Aurix/Tricore实验解析:从链接脚本到汇编指令的Trap向量表构建

1. 理解Trap机制与向量表基础 在Aurix/Tricore架构中&#xff0c;Trap&#xff08;陷阱&#xff09;是处理器响应异常事件的硬件机制&#xff0c;相当于汽车的安全气囊——平时看不见&#xff0c;但遇到碰撞时会立即触发保护。与中断不同&#xff0c;Trap是同步触发的&#xff…...

AI驱动的科研绘图革命:DeTikZify如何终结图表代码的手动时代

AI驱动的科研绘图革命&#xff1a;DeTikZify如何终结图表代码的手动时代 【免费下载链接】DeTikZify Synthesizing Graphics Programs for Scientific Figures and Sketches with TikZ 项目地址: https://gitcode.com/gh_mirrors/de/DeTikZify 当deadline遇上绘图难题&a…...

双轴光伏智能跟踪系统,怎么让光伏发电效率提上来的?

做光伏相关开发和落地的朋友&#xff0c;应该都绕不开一个核心痛点&#xff1a;传统固定式光伏的光能利用率&#xff0c;一直有明显的天花板。今天就用通俗的方式&#xff0c;拆解WZ HELIO这套双轴智能跟踪系统&#xff0c;看看它是怎么解决这个行业老问题的。先搞懂核心逻辑&a…...

FastAPI 2.0流式AI接口上线前必须做的4项压力测试:QPS突破1200+的实测阈值与熔断配置清单

第一章&#xff1a;FastAPI 2.0流式AI接口压力测试全景认知FastAPI 2.0 引入了对异步流式响应&#xff08;如 StreamingResponse&#xff09;的深度优化&#xff0c;使大语言模型&#xff08;LLM&#xff09;类接口可原生支持 Server-Sent Events&#xff08;SSE&#xff09;、…...

告别混乱!用PyQt5模块化设计打造你的工业上位机(附完整源码与两种传值方式详解)

工业级PyQt5模块化开发实战&#xff1a;从架构设计到数据交互的完整指南 在工业自动化与测控领域&#xff0c;上位机软件往往需要集成数据采集、实时监控、设备控制等复杂功能。传统开发方式容易导致代码臃肿、维护困难——按钮事件与业务逻辑纠缠不清&#xff0c;数据流向如迷…...

【仅限JDK 25 Early Access用户】:隐藏API `LinkerOptions` 强制启用向量化调用的2行代码,实测吞吐提升2.8倍

第一章&#xff1a;Java 25 外部函数接口优化案例Java 25 正式将外部函数与内存 API&#xff08;Foreign Function & Memory API&#xff09;从预览特性转为正式特性&#xff0c;显著提升了 JVM 与本地代码交互的安全性、性能与开发体验。相比早期 JNI 方案&#xff0c;FFM…...

2026论文写作工具红黑榜:一键生成论文工具怎么选?别再瞎找了!

2026年论文写作工具红黑榜出炉&#xff01;红榜优先选千笔AI、ThouPen、豆包&#xff0c;适配国内学术规范&#xff0c;内容严谨可靠&#xff1b;黑榜需避开低质免费工具、无真实引用平台、过度依赖全文生成的工具。选择时可参考三维模型&#xff1a;需求匹配度 - 数据可信度 -…...

基于宝塔面板与Docker Compose快速部署Dify最新版实战指南

1. 为什么选择宝塔Docker Compose部署Dify&#xff1f; 最近在帮几个创业团队搭建AI开发环境时&#xff0c;发现很多小伙伴都被复杂的部署流程劝退。传统的手动部署方式需要逐个安装Python、Redis、PostgreSQL等依赖&#xff0c;光是版本兼容问题就能折腾大半天。直到上个月我…...