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

Vue2/Vue3中编程式路由导航实践总结

【1】Vue2编程式路由导航

① router.push

除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。

router.push(location, onComplete?, onAbort?)

注意:在 Vue 实例内部,你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push

想要导航到不同的 URL,则使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。

当你点击 <router-link> 时,这个方法会在内部调用,所以说,点击 <router-link :to="..."> 等同于调用 router.push(...)

声明式编程式
<router-link :to="...">router.push(...)

该方法的参数可以是一个字符串路径,或者一个描述地址的对象。例如:

// 字符串
router.push('home')// 对象
router.push({ path: 'home' })// 命名的路由
router.push({ name: 'user', params: { userId: '123' }})// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})

注意:如果提供了 path,params 会被忽略,上述例子中的 query 并不属于这种情况。取而代之的是下面例子的做法,你需要提供路由的 name 或手写完整的带有参数的 path:

const userId = '123'
// params与name组合使用
router.push({ name: 'user', params: { userId }}) // -> /user/123
//拼接path
router.push({ path: `/user/${userId}` }) // -> /user/123// 这里的 params 不生效  params不可以与path组合使用
router.push({ path: '/user', params: { userId }}) // -> /user

同样的规则也适用于 router-link 组件的 to 属性。

在 2.2.0+,可选的在 router.pushrouter.replace 中提供 onComplete 和 onAbort 回调作为第二个和第三个参数。这些回调将会在导航成功完成 (在所有的异步钩子被解析之后) 或终止 (导航到相同的路由、或在当前导航完成之前导航到另一个不同的路由) 的时候进行相应的调用。在 3.1.0+,可以省略第二个和第三个参数,此时如果支持 Promise,router.push 或 router.replace 将返回一个 Promise

注意: 如果目的地和当前路由相同,只有参数发生了改变 (比如从一个用户资料到另一个 /users/1 -> /users/2),你需要使用 beforeRouteUpdate 来响应这个变化 (比如抓取用户信息)。


② router.replace

router.replace(location, onComplete?, onAbort?)

router.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。

声明式编程式
<router-link :to="..." replace>router.replace(...)

使用实例如下:

<li v-for="m in messages" :key="m.id"><router-link :to="`/home/message/detail/${m.id}`">{{m.title}}</router-link><button @click="pushShow(m.id)">push查看</button><button @click="replaceShow(m.id)">replace查看</button>
</li>
methods: {pushShow (id) {this.$router.push(`/home/message/detail/${id}`)},replaceShow(id) {this.$router.replace(`/home/message/detail/${id}`)}}

总结如下:

1) this.$router.push(path): 相当于点击路由链接(可以返回到当前路由界面)
2) this.$router.replace(path): 用新路由替换当前路由(不可以返回到当前路由界面)
3) this.$router.back(): 请求(返回)上一个记录路由
4) this.$router.go(-1): 请求(返回)上一个记录路由
5) this.$router.go(1): 请求下一个记录路由

③ 替换路由参数并刷新路由

this.$router.replace({name: 'concertDetail',query: {concertId: id}
})
/**  兼容性好*/
window.location.reload()

【2】Vue3编程式路由导航

路由组件的两个重要的属性:$route$router变成了两个hooks 。route表示当前路由,router表示路由器实例。

import {useRoute,useRouter} from 'vue-router'const route = useRoute()
const router = useRouter()
//当前路由信息
console.log(route.query)
console.log(route.parmas)
//路由器实例
console.log(router.push)
console.log(router.replace)

① router.replace

<template><div class="news"><!-- 导航区 --><ul><li v-for="news in newsList" :key="news.id"><button @click="showNewsDetail(news)">查看新闻</button><RouterLink :to="{name:'xiang',query:{id:news.id,title:news.title,content:news.content}}">{{news.title}}</RouterLink></li></ul><!-- 展示区 --><div class="news-content"><RouterView></RouterView></div></div>
</template><script setup lang="ts" name="News">import {reactive} from 'vue'import {RouterView,RouterLink,useRouter} from 'vue-router'const newsList = reactive([{id:'asfdtrfay01',title:'很好的抗癌食物',content:'西蓝花'},{id:'asfdtrfay02',title:'如何一夜暴富',content:'学IT'},{id:'asfdtrfay03',title:'震惊,万万没想到',content:'明天是周一'},{id:'asfdtrfay04',title:'好消息!好消息!',content:'快过年了'}])const router = useRouter()interface NewsInter {id:string,title:string,content:string}function showNewsDetail(news:NewsInter){router.replace({name:'xiang',query:{id:news.id,title:news.title,content:news.content}})}</script>

相关文章:

Vue2/Vue3中编程式路由导航实践总结

【1】Vue2编程式路由导航 ① router.push 除了使用 <router-link> 创建 a 标签来定义导航链接&#xff0c;我们还可以借助 router 的实例方法&#xff0c;通过编写代码来实现。 router.push(location, onComplete?, onAbort?)注意&#xff1a;在 Vue 实例内部&#…...

【nginx】ngx_http_proxy_connect_module 正向代理

50.65无法访问 服务器, (403 错误) 50.196 可以访问服务器。 那么,配置65 通过196 访问。 需要一个nginx作为代理 【nginx】搭配okhttp 配置反向代理 发送原生的nginx是不支持okhttp的CONNECT请求的。 大神竟然给出了一个java工程 GINX编译ngx_http_proxy_connect_module及做…...

单考一个OCP认证?还是OCP和OCM认证都要考?

​ Oracle的OCP认证是数据库行业非常经典的一个认证&#xff0c;从事数据库行业的人都建考一个 Oracle OCP 认证。 OCP认证内容包括&#xff1a; OCA部分&#xff1a;数据库基础知识、SQL 语言使用、基本的数据库管理技能等&#xff0c;如数据库安装与配置、理解数据库架构、…...

在Spring官网查看Springboot与Java的版本对应关系

查看Spring Boot与Java的版本对应关系&#xff0c;可以按照以下步骤操作&#xff1a; 访问Spring官方网站&#xff0c;进入Spring Boot项目页面。可以通过点击菜单中的“Projects”&#xff0c;然后选择“Spring Boot”来访问。Spring | Home 在Spring Boot的LEARN页签中&…...

HarmonyOS学习(十二)——数据管理(一)分布式数据

文章目录 1、分布式数据服务概述2、KV数据模型&#xff08;键值对数据库&#xff09;3、分布式数据服务的约束和限制4、接口说明5、分布式数据服务开发步骤5.1、导入模块5.2、构造分布式数据库管理类实例5.3、获取、创建分布式数据库5.4、订阅分布式数据库的数据变化5.5、插入数…...

3D GS 测试自己的数据

环境配置 win11 vs2019cuda11.8driver522.06python3.10pytorch 2.4.0colmap3.8&#xff08;可选&#xff0c;用于将图像生成点云&#xff09; 安装 1 minicodagit 略 2 vs2019 在装cuda前安装&#xff0c; 选择c桌面开发即可&#xff0c; 环境变量path中配置C:\Program…...

攻防世界 supersqli

supersqli 一般sql语句的题都是先判断&#xff0c;经过测试&#xff0c;是单引号注入 999 union select database(),2#可以发现很多关键字都被过滤了select&#xff0c;所以联合查询&#xff0c;报错注入&#xff0c;布尔和时间盲注都不能用了&#xff0c;可以想到堆叠注入。…...

OceanBase 运维管理工具 OCP 4.x 升级:聚焦高可用、易用性及可观测性

可视化的管控平台&#xff0c;对 OceanBase 这类的分布式数据库及大规模数据的运维管理来说&#xff0c;是提升运维效率与数据库管理水平的重要工具。OceanBase 运维管理工具 OCP 作为专为OceanBase数据库设计的企业级全生命周期管理平台&#xff0c;为用户提供了全面的数据库可…...

HarmonyOS应用开发( Beta5.0)HOS-用户认证服务:面部识别

介绍 User Authentication Kit&#xff08;用户认证服务&#xff09;提供了基于用户在设备本地注册的人脸和指纹来认证用户身份的能力。 用户向应用/系统服务请求访问某些个人数据或执行某些敏感操作时&#xff0c;应用/系统服务将调用系统用户身份认证控件对用户身份进行认证…...

解决Docker镜像不可下载

使用国内可信的镜像中心 可信国内镜像网址&#xff1a;https://hub.atomgit.com/ 点击镜像仓库 搜索想要的镜像 按如图所示&#xff0c;即可查看对应的版本 点击复制&#xff0c;即可下载使用 缺点&#xff1a; 可用的镜像相比于docker官方量少 并且&#xff0c;获取的镜像名字…...

考研报名确认上传身份证户口本学历证明照片如何压缩裁剪

随着考研季节的到来&#xff0c;数以万计的考生开始准备报名所需的各种材料。在这一过程中&#xff0c;证件照片的上传无疑是一个关键环节。正确的照片格式和尺寸不仅能确保报名流程的顺利进行&#xff0c;还能避免因材料不合格而造成的不必要麻烦。本文将详细介绍如何在考研报…...

DolphinScheduler应用实战笔记

DolphinScheduler应用实战笔记 一、前言二、DS执行SQL或存储过程二、DS调用DataX同步数据三、DS调用HTTP接口四、DS依赖(DEPENDENT)节点五、DS SPARK 节点六、DS Flink 节点七、DS Flink 节点八、DS SQL 节点九、DS Java程序十、DS Python节点 一、前言 DolphinScheduler&…...

IThenticate查重为何成为英语期刊论文投稿首选工具

发表一篇英语论文&#xff0c;我发现很多人在准备向期刊投稿之前&#xff0c;都会选择使用IThenticate查重系统对论文进行相似性检测。是什么魔力&#xff0c;让这个查重工具让投稿者如此偏爱使用它查重呢&#xff1f; 一、什么是IThenticate查重系统&#xff1f; 在了解它被…...

C++ 在项目中使用Git

目录 一&#xff1a;配置邮箱和姓名 二&#xff1a;生成SSH Key 三&#xff1a;git 工作区和状态 四&#xff1a;git log 常用法 五&#xff1a;git diff 常用法 六&#xff1a;git 分支操作 七&#xff1a;git 回溯分支 八&#xff1a;git rebase -i 压缩历史提交…...

Python(TensorFlow和PyTorch)及C++注意力网络导图

&#x1f3af;要点 谱图神经网络计算注意力分数对比图神经网络、卷积网络和图注意力网络药物靶标建模学习和预测相互作用腹侧和背侧皮质下结构手写字体字符序列文本识别组织病理学图像分析长短期记忆财务模式预测相关性生物医学图像特征学习和迭代纠正 Python注意力机制 对…...

选择firewalld还是iptables

firewalld与iptables介绍 firewalld和iptables都是Linux系统中用于管理防火墙规则的重要工具&#xff0c;但它们在功能、使用方式和适用场景上存在显著差异。 动态性&#xff1a; firewalld可以动态修改单条规则&#xff0c;并且能够动态管理规则集。这意味着在更新规则时不会…...

C到C++入门基础知识

一&#xff1a;命名空间&#xff1a;namespace &#xff08;一&#xff09;&#xff1a;命名空间的定义 注&#xff1a;命名空间只能定义在全局&#xff0c;不能定义在函数内部。 &#xff08;1&#xff09;类似于C语言的结构体&#xff0c;C语言的命名空间定义为&#xff1…...

Aigtek功率放大器的主要参数有什么

功率放大器是一种电子设备&#xff0c;通常用于放大输入信号的功率。为了评估和描述功率放大器的性能&#xff0c;有一些主要参数需要了解。下面将介绍一些常见的功率放大器参数。 增益&#xff1a;功率放大器的增益是指输出功率与输入功率之间的比值。它表示了信号经过放大器后…...

运维工程师概述及职责

运维工程师 运维运维工程师&#xff08;Operations Engineer 或 System Administrator&#xff09;是负责确保计算机系统、服务器、网络、存储设备等基础设施稳定运行的专业人员。 运维工程师在IT行业中扮演着至关重要的角色&#xff0c;是连接开发团队和业务团队的桥梁&#…...

Android系统dumpsys命令详解

文章目录 1. dumpsys 的工作原理2. 基本使用方法执行 dumpsys限制 dumpsys 的输出 3. 常见的 dumpsys 服务1. Activity Manager (activity)2. Battery Service (battery)3. Window Manager (window)4. Package Manager (package)5. Power Manager (power)6. Media DRM (media.d…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...