【Vue3】路由传参的几种方式

路由导航有两种方式,分别是:声明式导航 和 编程式导航
参数分为query参数和params参数两种

声明式导航

query参数

一、路径字符串拼接(不推荐)

1.传参

在路由路径后直接拼接?参数名:参数值 ,多组参数间使用&分隔。

<RouterLink to="/path/path1?name=田本初&age=23"></RouterLink>

如果参数值为变量,需要使用模版字符串。

let str = "田本初"
<RouterLink :to=`"/path/path1?name=${str}&age=23"`></RouterLink>

2.接收与使用

// 接收
import { useRoute } from "vue-router"
const route = useRoute()// 使用
<div>{{ route.query.name }}</div>
<div>{{ route.query.age }}</div>

二、to传对象写法(推荐)

1.传参

to不再传递字符,而是传一个对象,由于参数为对象,所以to前需要加上:

<RouterLink :to="{ path: "/path/path1",query: {name: "田本初",age: 23}
}"/>

2.接收与使用

// 接收
import { useRoute } from "vue-router"
const route = useRoute()// 使用
<div>{{ route.query.name }}</div>
<div>{{ route.query.age }}</div>

同拼接字符串的使用方式

params参数

params参数,需要在路由规则中提前声明参数名,参数名前不要丢失冒号 。

这里给 路由/path/path1 添加了name和age参数,由于age后添加了问号,所以age为可传参数,否则未传age会报错。

{path:"/path",component: Comp1children:[{ path:'path1/:name/:age?',component: Comp2 }]
}

一、路径字符串拼接(不推荐)

1.传参

在路由路径后直接拼接/参数值

<RouterLink to="/path/path1/田本初/23"></RouterLink>

参数值如果是变量,使用模版字符串

let str = "田本初"
<RouterLink :to=`"/path/path1/${str}/23"`></RouterLink>

2.接收与使用

// 接收
import { useRoute } from "vue-router"
const route = useRoute()// 使用
<div>{{ route.params.name }}</div>
<div>{{ route.params.age }}</div>

二、to传对象写法(推荐)

1.传参

to不再传递字符,而是传一个对象,由于参数为对象,所以to前需要加上冒号

如果使用path,会报警告 ,译为如果写path会被忽略,请使用name。

<RouterLink :to="{ path: "/path/path1",params: {name: "田本初",age: 23}
}"/>

在这里插入图片描述

正确写法:路径使用name,注意name需保持与路由规则中的一致。

// 路由规则配置
{path:"/path",component: Comp1children:[{ name:'path1Name',path:'path1/:name/:age',component: Comp2 }]
}// 传参
<RouterLink :to="{ name: "path1Name",params: {name: "田本初",age: 23}
}"/>

注意:params参数不能传数组或对象,否则会报警告。

2.接收与使用

// 接收
import { useRoute } from "vue-router"
const route = useRoute()// 使用
<div>{{ route.params.name }}</div>
<div>{{ route.params.age }}</div>

编程式导航(推荐使用)

以上 <RouterLink> 标签的写法是声明式导航,但是开发中编程式导航更常用

不同于声明式导航,编程式导航是函数形式,相比于声明式导航的标签,更加灵活。

语法:
引入useRouter,router有两种方式,分别为push和replace,push会保留历史记录,replace不会保留历史记录,参数对象与声明式导航的对象写法一致。

import { useRouter } from "vue-router"
const router = useRouter()function hanlder() {router.push({name:'xxx',query:{ name:'田本初', age:23}})
}

如何简化参数使用

方法一: 解构 配合 toRefs

如果解构使用query/params对象,由于是直接从响应式数据中解构,变量会丢失响应式,需要使用toRefs。

// 接收
import { useRoute } from "vue-router"
import { toRefs } from "vue"
const route = useRoute()
const { query } = toRefs(route)// 使用
<div>{{ query.name }}</div>

方法二:路由的props配置

方式一:将路由收到的所有params参数作为props传给路由组件

路由规则中添加 props:true

// 路由规则配置
{ path:'/path/path1/:name/:age', component: Comp2, props: true }

使用参数时,defineProps([‘name’,‘age’])

defineProps(['name','age'])<div>{{ name }}</div>
<div>{{ age }}</div>

方式二:方式一只能处理params参数,如果想处理query参数,需要写成函数形式

路由规则中添加props函数

// 路由规则配置
{ path:'/path/path1/:name/:age', component: Comp2, props(route){return route.query} 
}

使用参数时,defineProps([‘name’,‘age’])

defineProps(['name','age'])<div>{{ name }}</div>
<div>{{ age }}</div>

总结

  • 路由导航分为声明式导航和编程式导航,声明式导航就是<RouterLink>标签,编程式导航就是函数形式。
  • 编程式导航有两种方式,push和replace,其中push会保留历史记录(浏览器可回退),replace不会保留历史记录。
  • query参数和params参数均有「拼接字符串写法」和「对象写法」,但更推荐使用to传对象的方式。
  • query拼接字符串在路径后添加 ?参数名=参数值,多组参数间以&分隔。
  • params拼接字符串在路径后直接 /参数值即可,但需要在路由规则中提前声明参数名,格式为path/:参数名,如果为可选参数,在参数名后添加问号
  • 对象写法中,query参数既可以使用path又可以使用name,但是params参数只能使用name

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/690786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity学习(27)——修改text控件的内容

手游最大的特点就是简单易懂好上手。 1.在canvas上添加一个text的UI&#xff0c;内容设置为空。在字体处添加宋体&#xff0c;增加一个tag。 2.修改LoginHandler中的内容如下&#xff1a;&#xff08;之前有从inputFiled中获取文字的经验&#xff09; public void LoginHandl…

阿里云幻兽帕鲁服务器,游戏服务端版本升级怎么操作?

用阿里云一键部署的幻兽帕鲁服务器&#xff0c;想要更新游戏服务端版本&#xff0c;现在非常简单。之前还需要通过输入一行命令来更新&#xff0c;而现在可以直接通过面板上的选型来操作。 打开阿里云的计算巢&#xff0c;找到你的这台服务实例&#xff0c;点击进入&#xff0…

通过HTTP隧道在Linux上实现跨域资源共享(CORS):打破数字世界的“门禁”

在数字世界里&#xff0c;有时你会碰到一些“门禁”&#xff0c;它们阻止你访问某些资源&#xff0c;就像现实生活中的门禁系统一样。这些“门禁”就是所谓的跨域资源共享&#xff08;CORS&#xff09;限制。不过别担心&#xff0c;我们有一个绝妙的解决方案&#xff1a;通过HT…

模板(函数模板)---C++

模板目录 模板1.模板概念&#xff12;.泛型编程 1.函数模板1.1 函数模板语法1.2 函数模板注意事项1.3 普通函数与函数模板的区别1.4 普通函数与函数模板的调用规则1.5 模板的局限性1.6 函数模板案例 模板 1.模板概念 模板就是建立通用的模具&#xff0c;大大提高复用性。 模板…

安防监控平台EasyCVR升级之后添加通道进行播放,提示“请确认播放协议配置选项”是什么原因?

智慧安防平台EasyCVR能在复杂的网络环境中&#xff08;专网、局域网、广域网、VPN、公网等&#xff09;将前端海量的设备进行统一集中接入与视频汇聚管理&#xff0c;平台可支持的接入协议包括&#xff1a;国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&a…

文献速递:GAN医学影像合成--联邦生成对抗网络基础医学图像合成中的后门攻击与防御

文献速递&#xff1a;GAN医学影像合成–联邦生成对抗网络基础医学图像合成中的后门攻击与防御 01 文献速递介绍 虽然深度学习在医疗保健研究中产生了显著影响&#xff0c;但其在医疗保健领域的影响无疑比在其他应用领域更慢、更有限。造成这种情况的一个重要原因是&#xff…

码蹄集新手村MT1241-总结

这道题可以通过手写排序算法&#xff0c;完成从大到小排序后再输出 这里提供另外一种思路 了解c中sort()函数。sort()函数可以对给定区间所有元素进行排序。它有三个参数sort(begin, end, cmp)&#xff0c;其中begin为指向待sort()的数组的第一个元素的指针&#xff0c;end为…

政安晨:【完全零基础】认知人工智能(四)【超级简单】的【机器学习神经网络】—— 权重矩阵

预备 如果小伙伴们第一次看到这篇文章&#xff0c;同时也对这类知识还是稍感陌生的话&#xff0c;可以先看看我这个系列的前三篇文章&#xff1a; 政安晨&#xff1a;【完全零基础】认知人工智能&#xff08;一&#xff09;【超级简单】的【机器学习神经网络】 —— 预测机ht…

【ARMv8M Cortex-M33 系列 8 -- RT-Thread 移植 posix pthread】

文章目录 RT-Thread POSIX PthreadRT-Thread Pthread 相关宏定义RT-Thread libc 初始化RT-Thread Pthread 测试 RT-Thread POSIX Pthread pthread是POSIX&#xff08;Portable Operating System Interface&#xff09;标准定义的一套线程相关的API&#xff0c;全称为POSIX Thr…

jenkins离线安装一波

内网安装jenkins对于没有外网的看过来 插件下载神器-jenkins-plugin-manager 首先下载jenkins&#xff0c;官网地址我就不贴了下载完正常运行&#xff0c;开始界面不要选择任何插件安装&#xff0c;选择无去下载一个插件下载工具https://github.com/jenkinsci/plugin-installa…

《Solidity 简易速速上手小册》第1章:Solidity 和智能合约简介(2024 最新版)

文章目录 1.1 Solidity 的起源和重要性1.1.1 基础知识解析1.1.2 重点案例&#xff1a;去中心化金融 (DeFi) 平台案例 Demo&#xff1a;简易借贷平台 1.1.3 拓展案例 1&#xff1a;NFT 市场案例 Demo&#xff1a;简易 NFT 市场 1.1.4 拓展案例 2&#xff1a;智能合约管理的投票系…

C++ 区间合并 算法(详解) + 例题

1、定义 把所有&#xff0c;有交集的区间合并 图解&#xff1a; 2、实现 步骤如下&#xff1a; 1、首先按照每个区间左端点排序 2、扫描 所有区间&#xff0c;进行区间合并 上述第二条&#xff0c;可以理解为&#xff1a;拿出一个区间去跟它后面的所有的区间去进行合并&…

electron Tab加载动画开启和关闭

记个开发中的bug&#xff0c;以此为鉴。眼懒得时候手勤快点儿&#xff0c;不要想当然&#xff01;&#xff01;&#xff01; 没有转载的价值&#xff0c;请勿转载搬运呦。 WebContents API&#xff1a; Event: did-finish-load​ 导航完成时触发&#xff0c;即选项卡的旋转…

conda 进入python环境里pip install安装不到该环境或不生效

参考&#xff1a;https://blog.csdn.net/weixin_47834823/article/details/128951963 https://blog.51cto.com/u_15060549/4662570?loginfrom_csdn 1、直接进入python Scripts目录下安装 cmd打开运行窗口&#xff0c;cd切换路径至指定虚拟环境下的Scripts路径后再pip安装 擦…

文件上传漏洞--Upload-labs--Pass10--双写绕过

一、什么是双写绕过 顾名思义&#xff0c;双写绕过就是双写文件后缀名来进行绕过&#xff0c;如&#xff1a;test.php 双写后为 test.pphphp。通常情况下双写绕过用于绕过源代码中的 str_ireplace()函数。 二、双写绕过原理 1、首先进行代码审计&#xff0c;源代码中有黑名单…

NBlog个人博客部署维护过程记录 -- 后端springboot + 前端vue

项目是fork的Naccl大佬NBlog项目&#xff0c;页面做的相当漂亮&#xff0c;所以选择了这个。可以参考2.3的效果图 惭愧&#xff0c;工作两年了也没个自己的博客系统&#xff0c;趁着过年时间&#xff0c;开始搭建一下. NBlog原项目的github链接&#xff1a;Naccl/NBlog: &#…

数据库||数据库的完整性

1.实验题目&#xff1a;数据库的完整性 2.实验目的和要求&#xff1a; 掌握数据库的实体完整性约束定义&#xff0c;完整性检查及违约处理方式。 掌握数据库的参照完整性约束定义&#xff0c;完整性检查及违约处理方式。 掌握数据库的用户定义完整性约束定义&#xff0c;完…

如何构建企业专属GPT

大语言模型&#xff08;LLM&#xff09;具有令人印象深刻的自然语言理解和生成能力&#xff0c; 2022年11月底OpenAI发布了ChatGPT&#xff0c;一跃成为人工智能AI领域的现象级应用。但由于LLM的训练数据集主要来源于互联网数据&#xff0c;企业私域信息并未被LLM所训练&#x…

MySQL进阶 - 备份与恢复

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…