Vue 3 中的路由传参详解※※※※

前言

在Vue应用中,路由传参是非常常见的需求,它允许我们在不同的组件之间传递数据。Vue Router提供了两种主要的方式来传递参数:query参数和params参数。下面我们将详细探讨这两种传参方式的使用方法和注意事项。

一、query参数

Query参数,顾名思义,是附加在URL后面的查询字符串,以?开头,后面跟着一系列的key=value对,多个键值对之间用&分隔。

1. 传递参数

在主路由中定义跳转的子路由,使用<router-link>组件可以方便地实现query参数的传递。有两种方式来指定to属性:字符串写法和对象写法。

  • 字符串写法:直接在to属性中写入路径和查询字符串。
<template><div class="news"><!-- 导航区 --><ul><li v-for="news in newsList" :key="news.id"><!-- 第一种写法路径拼接字符串--><RouterLink :to="`/news/detail?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} from 'vue-router'const newsList = reactive([{id:'asfdtrfay01',title:'很好的抗癌食物',content:'西蓝花'},{id:'asfdtrfay02',title:'如何一夜暴富',content:'学IT'},{id:'asfdtrfay03',title:'震惊,万万没想到',content:'明天是周一'},{id:'asfdtrfay04',title:'好消息!好消息!',content:'快过年了'}])</script><style scoped>
/* 新闻 */
.news {padding: 0 20px;display: flex;justify-content: space-between;height: 100%;
}
.news ul {margin-top: 30px;/* list-style: none; */padding-left: 10px;
}
.news li::marker {color: #64967E;
}
.news li>a {font-size: 18px;line-height: 40px;text-decoration: none;color: #64967E;text-shadow: 0 0 1px rgb(0, 84, 0);
}
.news-content {width: 70%;height: 90%;border: 1px solid;margin-top: 20px;border-radius: 10px;
}
</style> 
  • 对象写法:通过一个对象来指定路径和查询参数。对象的path属性指定路径,query属性则是一个包含所有查询参数的对象。
<template><div class="news"><!-- 导航区 --><ul><li v-for="news in newsList" :key="news.id"><!-- 第二种写法指定路由名称参数query列表--><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} from 'vue-router'const newsList = reactive([{id:'asfdtrfay01',title:'很好的抗癌食物',content:'西蓝花'},{id:'asfdtrfay02',title:'如何一夜暴富',content:'学IT'},{id:'asfdtrfay03',title:'震惊,万万没想到',content:'明天是周一'},{id:'asfdtrfay04',title:'好消息!好消息!',content:'快过年了'}])</script><style scoped>
/* 新闻 */
.news {padding: 0 20px;display: flex;justify-content: space-between;height: 100%;
}
.news ul {margin-top: 30px;/* list-style: none; */padding-left: 10px;
}
.news li::marker {color: #64967E;
}
.news li>a {font-size: 18px;line-height: 40px;text-decoration: none;color: #64967E;text-shadow: 0 0 1px rgb(0, 84, 0);
}
.news-content {width: 70%;height: 90%;border: 1px solid;margin-top: 20px;border-radius: 10px;
}
</style>
2. 接收参数

在目标组件中,也就是上述定义的'xiang'路由组件,我们可以使用useRoute来获取传递过来的query参数。useRoute返回一个响应式的路由对象,其中的query属性包含了所有的查询参数。

<template><ul class="news-list"><li>编号:{{ query.id }}</li><li>标题:{{ query.title }}</li><li>内容:{{ query.content }}</li></ul>
</template><script setup lang="ts" name="Detail">import {toRefs} from 'vue'import {useRoute} from 'vue-router'// 接收跳转请求的query参数let route = useRoute()console.log(route.query)let {query} = toRefs(route)</script>

运行结果如下,在控制台可以接收到路由请求参数。

二、params参数

Params参数是通过URL的路径部分来传递参数的,通常用于传递动态路由参数。

1. 传递参数

同样地,我们使用<router-link>组件来传递params参数。但需要注意的是,如果使用对象写法来指定to属性,我们必须使用路由的name配置项,而不能直接使用path。

  • 字符串写法:直接在to属性中写入包含参数的路径。
<RouterLink :to="`/news/detail/${news.id}/${news.title}/${news.content}`">{{news.title}}</RouterLink>
  • 对象写法:通过一个对象来指定路由名称和参数。对象的name属性指定路由名称,params属性则是一个包含所有路径参数的对象。
<RouterLink :to="{name:'xiang', // 使用name配置项params:{id:news.id,title:news.title,content:news.content}}"
>{{news.title}}
</RouterLink>
2. 接收参数

在目标组件中,我们同样可以使用useRoute来获取传递过来的params参数。但这次我们需要访问的是route.params属性。

<template><ul class="news-list"><!--获取路由param的参数--><li>编号:{{ route.params.id }}</li><li>标题:{{ route.params.title }}</li><li>内容:{{ route.params.content }}</li></ul>
</template><script setup lang="ts" name="Detail">import {toRefs} from 'vue'import {useRoute} from 'vue-router'// 接收跳转请求的param参数let route = useRoute()console.log(route)</script>

需要注意的是,使用param获取路由参数,需要在路由定义的ts文件中,定义好参数,如:

    {name:'xinwen',path:'/news',component:News,// 嵌套子路由children:[{name:'xiang',path:'detail/:id/:title/:content?',component:Detail}]}

三、总结

  1. 当使用params参数时,如果采用对象写法来指定to属性,必须使用路由的name配置项,而不能直接使用path。这是因为params参数需要通过路由的名称来进行匹配,而不是简单地拼接路径。
  2. 在传递params参数之前,需要在路由规则中为对应的参数占位。例如,如果我们要传递一个名为id的参数,那么路由规则应该包含一个:id的动态段。
  3. Query参数和params参数各有优缺点。Query参数简单易用,不需要对路由规则做特殊处理;但缺点是它们会出现在URL中,可能会影响用户体验和SEO。Params参数更加灵活和安全,不会出现在URL中(除非你显式地想要它们出现);但缺点是需要对路由规则进行特殊配置。

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

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

相关文章

如何创建一个socket服务器?

1. 导入必要的库 首先&#xff0c;需要导入Python的socket库&#xff0c;它提供了创建和管理socket连接的功能。 python import socket 2. 创建服务器端socket 使用socket.socket()函数创建一个服务器端的socket对象&#xff0c;指定协议族&#xff08;如socket.AF_INET表示…

lua垃圾回收

lua垃圾回收 lua 垃圾回收 lua 垃圾回收 collectgarbage(“count”)获取当前lua脚本占用内存字节数(单位为KB)。 collectgarbage(“collect”)执行一次垃圾回收。 xxxnil 将变量置为空&#xff0c;会释放内存。 lua中的机制和c#中回收机制很类似 解除羁绊(置为空)。 --垃圾回…

友思特应用 | 行业首创:基于深度学习视觉平台的AI驱动轮胎检测自动化

导读 全球领先的轮胎制造商 NEXEN TIRE 在其轮胎生产检测过程中使用了基于友思特伙伴Neurocle开发的AI深度学习视觉平台&#xff0c;实现缺陷检测率高达99.96%&#xff0c;是该行业首个使用AI平台技术推动缺陷检测自动化流程的企业。 将AI应用从轮胎开发扩展到制造过程 2024年…

前后端+数据库的项目实战:hbu迎新网-较复杂(下)javaweb

目录 十一、实现对内容的富文本编辑&#xff08;换行、图片颜色等等样式&#xff09; &#xff08;1&#xff09;下载富文本编辑器&#xff0c;引入资源 &#xff08;2&#xff09;将原项目的内容部分替换为富文本编辑器 1、替换添加页面 2、替换修改页面&#xff08;和添…

脚本语言 Lua

概念 Lua由标准C编写而成&#xff0c;几乎在所有操作系统和平台上都可以编译、运行。Lua脚本可以很容易地被C/C 代码调用&#xff0c;也可以反过来调用C/C的函数&#xff0c;这使得Lua在应用程序中可以被广泛应用。Lua并没有提供强大的库&#xff0c;它是不适合作为开发独立应…

【数据分享】2000—2024年我国乡镇的逐月归一化植被指数(NDVI)数据(Shp/Excel格式)

之前我们分享过2000—2024年我国省市县三级逐月归一化植被指数&#xff08;NDVI&#xff09;数据&#xff0c;该数据是基于NASA定期发布的MOD13A3数据集中的月度NDVI栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;计算得出。很多小伙伴拿到数据后反馈是否可以处理出…

【负载均衡系列】HAProxy

HAProxy(High Availability Proxy)是一款高性能的 ​TCP/HTTP 负载均衡器,专注于提供高可用性、灵活性和可靠性。以下是关于HAProxy的详细解析,涵盖其工作原理、工作机制、工作模式等核心方面: 一、HAProxy 工作原理 HAProxy的核心职责是将客户端请求高效、可靠地分发到后…

轻松迁移 Elasticsearch 数据:如何将自建索引导出并导入到另一个实例

概述 在日常的 Elasticsearch 运维和数据管理中&#xff0c;数据迁移是一个常见的需求。无论是为了备份、升级&#xff0c;还是将数据从一个集群迁移到另一个集群&#xff0c;导出和导入索引数据都是至关重要的操作。本文将详细介绍如何将自建 Elasticsearch 实例中的索引数据…

JVM 类加载器之间的层次关系,以及类加载的委托机制

JVM 类加载器之间存在一种层次关系&#xff0c;通常被称为双亲委派模型 (Parent Delegation Model)。这种层次关系和委托机制是 Java 类加载机制的核心&#xff0c;对于保证 Java 程序的安全性和避免类冲突至关重要。 1. 类加载器的层次关系: JVM 中的类加载器&#xff08;Cl…

基于 Vue 3 的PDF和Excel导出

以下是基于 Vue 3 Composition API 的完整实现&#xff0c;包括 PDF 和 Excel 导出。 一、PDF 导出 (Vue 3) 安装依赖 在项目中安装相关库&#xff1a; npm install html2canvas jspdf Vue 3 代码实现 <template><div><div ref"pdfContent" cla…

【Jupyter】notebook无法显示tqdm进度条

错误描述 from tqdm.notebook import tqdm 用的时候报错&#xff1a; Error displaying widget解决方式 # 先装nodejs conda install -c conda-forge nodejs20# 重装ipywidgets pip uninstall ipywidgets pip install ipywidgets jupyter labextension install jupyter-wid…

ubuntu20如何升级nginx到最新版本(其它版本大概率也可以)

前言&#xff1a; Nginx非常常用&#xff0c;所以在网络安全方面备受“关注”。其漏洞非常多&#xff0c;要经常保持软件更新版本才能更好的保证安全。但是Ubuntu官网适配nginx非常慢&#xff0c;所以nginx官方也会推出针对主流Linux操作系统的包管理工具安装方式。 步骤&…

word插入Mathtype公式居中和自动更新

word插入公式自动更新 前提&#xff1a;安装Mathtype 1.word中查看页的宽度 出现如下 2.设置样式 出现这个窗口 给样式随便起个名字 3.修改样式 3.1 设置两个制表位 第二个 3.2 修改公式字体 如下所示 4. 修改公式格式 4.1在word中打开 Mathtype 4.2 修改公式的格式 变成…

如何从后端实现页面跳转?

例&#xff1a;请求转发 例&#xff1a;重定向 例&#xff1a;区别&#xff1a;携带参数的后端跳转 例&#xff1a;是否可以访问外部资源 请求转发&#xff1a;客户端发起一个请求到服务端&#xff0c;服务端把这个请求转发至其他地方 重定向&#xff1a;客户端发起一个请求…

APIJSON快速入门

作者 版本 时间 内容 备注 Allen V1.0.0 2021/08/19 初稿完成 AllenV1.0.1 2021/08/22 添加常见问题 1.流程说明 一个接口的开发,比如Java用SpringBoot,Mybatis来开发一般来说就像下面这个流程 部署上这个项目后,流程变成了这样 如果使用 apijson-framework,还可进一步简化…

STM32八股【3】------RAM和片上FLASH

1、RAM和FLASH构成 1.RAM ┌──────────────────────────┐ │ 栈区 (Stack) │ ← 从RAM顶端向下扩展&#xff08;存储局部变量、函数调用信息&#xff09; │--------------------------│ │ 堆区 (Heap) │ ← …

基于springboot的星之语明星周边产品销售网站(050)

摘要 随着信息互联网信息的飞速发展&#xff0c;无纸化作业变成了一种趋势&#xff0c;针对这个问题开发一个专门适应洗衣店业务新的交流形式的网站。本文介绍了星之语明星周边产品销售网站的开发全过程。通过分析企业对于星之语明星周边产品销售网站的需求&#xff0c;创建了一…

Android Launcher3 HotSeat文件夹创建禁止方案全解析

一、技术背景与实现原理 在Android 13 Launcher3定制开发中&#xff0c;需屏蔽HotSeat区域的文件夹创建功能。该功能涉及的核心事件处理流程如下&#xff1a; 复制 [拖拽事件] -> [Workspace.onDrop()] -> [CellLayout.performReorder()]└─> [createUserFolderIf…

从零到一开发一款 DeepSeek 聊天机器人

AI聊天机器人 目标设计方案系统架构技术选型功能模块 实现代码环境配置安装依赖 核心代码API 请求函数主循环函数 功能扩展1. 情感分析2. 多语言支持3. 上下文记忆4. 用户身份识别 总结附录 目标 开发一个智能聊天机器人&#xff0c;旨在为用户提供自然、流畅的对话体验。通过…

OpenCV-Contrib常用扩展模块

‌一、高频使用模块‌ ‌aruco 模块‌ ‌功能‌&#xff1a;用于生成与检测二维码&#xff08;如 ArUco Marker、AprilTag&#xff09;&#xff0c;支持增强现实&#xff08;AR&#xff09;中的物体定位与姿态估计‌。‌典型应用‌&#xff1a;AR 应用中的场景锚定、机器人导航…