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

Vue 3 路由传参使用指南

目录

一、路由传参概述

二、动态路由参数(params)

2.1 基础用法

2.2 传递参数

2.3 获取参数

2.4 可选参数

2.5 多个参数与正则约束

2.6 多 params 的详细用法

 多个可选参数的使用

 路由配置

获取可选参数

三、查询参数(Query)

3.1 特点与应用场景

3.2 传递参数

3.3 获取参数

3.4 保留当前查询参数

四、命名视图传参

五、props 解耦(推荐方式)

六、状态管理(Pinia/Vuex)

6.1 使用 Pinia 示例

七、路由元信息(meta)

八、不同传参方式对比

九、最佳实践

十、常见问题与解决方案


Vue 3 路由传参使用指南

一、路由传参概述

在 Vue 3 应用中,路由传参是实现页面间数据传递的核心功能。Vue Router 4 提供了多种传参方式,适用于不同的场景。这个指南将介绍如何在 Vue 3 中使用路由传递参数。


二、动态路由参数(params)

2.1 基础用法

动态路由参数通过在路由路径中定义 :参数名 来传递。参数将成为 URL 的一部分,适用于 SEO 或书签场景。

路由配置:

const routes = [{ path: '/user/:id', name: 'UserDetail', component: UserDetail },{ path: '/post/:id/:action?', name: 'Post', component: Post } // 可选参数
];
2.2 传递参数

通过路由链接或编程式导航传递参数。

<!-- 通过路由链接 -->
<router-link :to="{ name: 'UserDetail', params: { id: 123 } }">用户详情</router-link><!-- 通过编程式导航 -->
this.$router.push({ name: 'UserDetail', params: { id: 123 } });
2.3 获取参数

在目标组件中使用 useRoute 来获取路由参数。

<script setup>
import { useRoute } from 'vue-router';
const route = useRoute();
console.log(route.params.id); // 输出: 123
</script>
2.4 可选参数

通过在参数后添加 ? 标记,使其成为可选参数。

{ path: '/user/:id?', component: User }
2.5 多个参数与正则约束

可以使用正则表达式来约束参数格式,例如:

{ path: '/article/:id(\\d+)/:action(edit|view)', component: Article }
2.6 多 params 的详细用法

可以传递多个动态参数,并根据需求获取:

路由配置:

const routes = [{ path: '/product/:category/:id', name: 'ProductDetail', component: ProductDetail },{ path: '/order/:orderId/:status?', name: 'OrderInfo', component: OrderInfo },{ path: '/blog/:year/:month/:day/:postId', name: 'BlogArticle', component: BlogArticle }
];

参数传递:

<router-link :to="{ name: 'ProductDetail', params: { category: 'electronics', id: 456 } }">电子产品详情</router-link>

获取参数:

<script setup>
import { useRoute } from 'vue-router';
const route = useRoute();
console.log(route.params.category); // electronics
console.log(route.params.id);       // 456
</script>

结合 props 解耦:

{ path: '/product/:category/:id', name: 'Product', component: ProductComponent, props: (route) => ({ category: route.params.category, id: Number(route.params.id) }) 
}

 多个可选参数的使用

在 Vue 3 中,处理多个可选参数的情况需要在路由配置中通过适当的方式来设置。多个可选参数可以通过在路由路径中给每个参数后添加 ? 来标记为可选。多个参数之间通过斜杠 / 分隔。

 路由配置

多个可选参数通过在路径中添加 ? 来实现,例如:

const routes = [{ path: '/user/:id?/:name?', name: 'UserDetail', component: UserDetail },{ path: '/product/:category?/:id?', name: 'ProductDetail', component: ProductDetail }
];

传递可选参数

router-linkrouter.push 中传递多个可选参数:

<router-link :to="{ name: 'UserDetail', params: { id: '123' } }">用户详情</router-link>
<router-link :to="{ name: 'UserDetail', params: { id: '123', name: 'John' } }">用户详情</router-link>
获取可选参数

通过 useRoute() 获取传递的多个可选参数:

<script setup>
import { useRoute } from 'vue-router';
const route = useRoute();
const userId = route.params.id || 'defaultId';  // 提供默认值
const userName = route.params.name || 'defaultName';  // 提供默认值
console.log(userId);   // 输出: "123" 或 "defaultId"
console.log(userName); // 输出: "John" 或 "defaultName"
</script>

三、查询参数(Query)

查询参数通过 URL 的查询字符串传递,适合传递可选参数、过滤条件等。

3.1 特点与应用场景

查询参数不会影响路由匹配,适合频繁变化的参数。

3.2 传递参数

通过路由链接:

<router-link :to="{ name: 'UserList', query: { page: 2, size: 10 } }">第二页</router-link>

通过编程式导航:

this.$router.push({ name: 'UserList', query: { page: 2, size: 10 } });
3.3 获取参数
<script setup>
import { useRoute } from 'vue-router';
const route = useRoute();
console.log(route.query.page);  // 2
console.log(route.query.size);  // 10
</script>
3.4 保留当前查询参数

通过 router.push 修改部分查询参数,并保持其他参数:

const route = useRoute();
router.push({ name: 'UserList', query: { ...route.query, page: 2 } });

四、命名视图传参

在路由配置中,可以为多个视图传递不同的参数。

路由配置:

const routes = [{ path: '/user/:id', components: { default: UserProfile, sidebar: UserSidebar }, props: { default: true, sidebar: { admin: true } }}
];

组件接收参数:

<!-- UserProfile.vue -->
<script setup>
const props = defineProps({ id: String });
</script><!-- UserSidebar.vue -->
<script setup>
const props = defineProps({ admin: Boolean });
</script>

五、props 解耦(推荐方式)

使用 props 选项将路由参数解耦为组件的普通 props,提高组件的复用性。

路由配置:

const routes = [{ path: '/user/:id', name: 'User', component: UserComponent, props: true },{ path: '/search', name: 'Search', component: SearchComponent, props: (route) => ({ query: route.query.q, page: Number(route.query.page) || 1 })}
];

组件接收参数:

<script setup>
const props = defineProps({ id: String, query: String, page: Number });
</script>

六、状态管理(Pinia/Vuex)

对于复杂或跨页面的数据传递,推荐使用状态管理库。

6.1 使用 Pinia 示例

定义 Store:

// store/user.js
import { defineStore } from 'pinia';export const useUserStore = defineStore('user', {state: () => ({ userId: null, userInfo: {} }),actions: {setUserId(id) { this.userId = id; },fetchUserInfo() { return fetch(`/api/users/${this.userId}`).then(res => res.json()); }}
});

使用 Store:

<script setup>
import { useUserStore } from '@/stores/user';
import { useRouter } from 'vue-router';const router = useRouter();
const userStore = useUserStore();const goToUser = (id) => {userStore.setUserId(id);router.push({ name: 'UserDetail' });
};
</script>

七、路由元信息(meta)

路由配置中可以添加元信息(meta),例如权限控制、页面标题等。

路由配置:

const routes = [{ path: '/dashboard', name: 'Dashboard', component: Dashboard, meta: { requiresAuth: true, title: '控制面板' }}
];

获取元信息:

<script setup>
import { useRoute } from 'vue-router';
const route = useRoute();
console.log(route.meta.title); // "控制面板"
</script>

全局导航守卫中使用:

router.beforeEach((to, from) => {if (to.meta.requiresAuth && !isAuthenticated()) {return { name: 'Login' };}
});

八、不同传参方式对比

方式适用场景URL 可见类型组件解耦
动态路由参数必需参数、SEO 友好字符串
查询参数可选参数、过滤条件字符串
props组件解耦、复用自定义
状态管理复杂数据、跨页面共享任意
路由元信息静态配置、导航守卫任意

九、最佳实践

  1. 优先使用 props 解耦:将路由参数转换为组件 props,提高组件复用性。

  2. 复杂数据用状态管理:跨页面或全局数据使用 Pinia/Vuex 管理。

  3. 合理选择参数类型:路径参数用于标识资源,查询参数用于过滤、排序等。

  4. 避免过度依赖 URL 传参:对于敏感数据,考虑使用状态管理或 API 获取。

  5. 参数类型转换:路由参数默认是字符串类型,必要时手动转换。


十、常见问题与解决方案

  1. 动态路由参数变化时组件不刷新:使用 watch 监听路由变化。

  2. 刷新页面后数据丢失:使用本地存储、Cookie 或重新获取数据。

  3. 路由参数过多导致 URL 过长:考虑使用状态管理或 POST 请求。

相关文章:

Vue 3 路由传参使用指南

目录 一、路由传参概述 二、动态路由参数&#xff08;params&#xff09; 2.1 基础用法 2.2 传递参数 2.3 获取参数 2.4 可选参数 2.5 多个参数与正则约束 2.6 多 params 的详细用法 多个可选参数的使用 路由配置 获取可选参数 三、查询参数&#xff08;Query&#x…...

vscode使用ssh链接服务器

vscode SSH vscode先下载remote ssh的插件&#xff0c;随后在左边的菜单栏里选择远程。 点击新建连接&#xff0c;输入用户名和地址&#xff0c;-p参数指定端口 ssh ubuntu{ip} -p xxx 随后就可以正常连接了&#xff0c;这里使用普通用户的用户名密码&#xff0c;别用root。 配…...

企业批量处理刚需PrintPDF 网络财务办公打印 网页到 Office 一键转 PDF

各位软件小达人&#xff0c;咱今天来唠唠PrintPDF。你知道吗&#xff0c;这玩意儿在好多软件和工具里都有&#xff0c;主要干这俩事儿。 先说说发票打印辅助工具。这东西可牛啦&#xff0c;它能专门快速打印发票、送货单这些票据。还能自己设定纸张大小&#xff0c;像A5、140…...

Python学习笔记--Django 表单处理

注意&#xff1a;本笔记基于python 3.12,django 5版本&#xff0c;不同版本使用上有些许差别。 HTML表单是网站交互性的经典方式。下面介绍如何用Django对用户提交的表单数据进行处理。 HTTP 请求 HTTP协议以"请求&#xff0d;回复"的方式工作。客户发送请求时&am…...

Python - 文件部分

- 第 101 篇 - Date: 2025 - 05 - 26 Author: 郑龙浩/仟墨 Python - 文件部分 学习时间: 2025-05-19 文章目录 Python - 文件部分一 文件与路径1 文本文件2 二进制文件3 编码格式① 常见编码格式② 指定编码格式③ 最佳格式④ 处理编码错误 4 绝对路径5 相对路径基本写法返回…...

【监控】Blackbox Exporter 黑盒监控

Blackbox Exporter 是 Prometheus 生态系统中的一个重要组件&#xff0c;用于执行 黑盒监控&#xff08;Blackbox Monitoring&#xff09;。与传统监控直接访问系统内部指标不同&#xff0c;黑盒监控通过向目标服务发送请求并分析响应&#xff0c;来评估服务的可用性、性能和功…...

历年福州大学保研上机真题

2025福州大学保研上机真题 2024福州大学保研上机真题 2023福州大学保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/problem?classification1 螺旋矩阵 题目描述 给定一个整数 n n n&#xff0c;要求打印出一个 n n n \times n nn 的螺旋矩阵。 例如&#xff…...

【RAG】ragflow源码亮点:文档embedding向量化加权融合

引言&#xff1a; 最近在看ragflow源码&#xff0c;其中有一个较为巧妙地设计&#xff1a;分别将 文字 、 标题 行向量化 之后&#xff0c;直接根据权重&#xff0c;进行加法运算&#xff0c;得到向量融合&#xff0c;增强了文本向量化的表示能力&#xff0c;这里开始讨论一下…...

大模型学习笔记day2 LoRA微调

LORA的核心思想基准模型不进行变化&#xff0c;我额外引入一部分参数来做专属内容处理&#xff0c;同时加上原有模型的推理能力&#xff0c;这部分新增加的的内容就是要训练出来的参数矩阵。 本征维度&#xff08;Intrinsic Dimension&#xff09;&#xff1a;是指数据或空间中…...

Maven-概述-介绍安装

目录 1.项目对象模型 2.依赖管理模型 3.仓库&#xff1a;用于存储资源&#xff0c;管理各种jar包 4.本地仓库路径 5.Maven配置本地仓库 5.1在Maven路径下新建文件夹用于本地仓库存储 5.2 复制本地仓库路径 5.3 找到配置文件路径&#xff0c;使用VSCode方式打开 5.4 新…...

GitHub Page填写域名显示被占用

问题描述 在Github上使用github page搭建个人博客&#xff0c;在项目中的Settings->Pages页面里面填写个人的域名时&#xff0c;出现如下报错信息&#xff0c;显示域名被占用情况 The custom domain example.com is already taken. If you are the owner of this domain, c…...

js实现监听Ctrl/Cmd+C复制、Ctrl/Cmd+Z撤销 等快捷键

使用document.addEventListener监听keydown事件即可&#xff1a; 上代码&#xff1a; document.addEventListener(keydown, function(e) {// 判断是否按下 Ctrl/Cmd Zif ((e.ctrlKey || e.metaKey) && e.key z && !e.shiftKey) {e.preventDefault(); // 阻…...

java高级 -动态代理

动态代理的概念 动态代理是一种在运行时生成代理对象的机制&#xff0c;无需手动编写代理类。 代理就类似于中介公司&#xff0c;为明星置办各种前期准备。例如歌声需要开演唱会唱歌&#xff0c;那么此时就需要代理对象进行置办场地&#xff0c;设备&#xff0c;然后明星只需要…...

机器学习算法:线性回归

1. 基础概念 线性回归是一种用于建模连续型目标变量&#xff08;如价格、销量、温度&#xff09;与一个或多个特征变量&#xff08;如面积、广告投入、时间&#xff09;之间线性关系的统计方法。 核心思想&#xff1a;找到一条直线&#xff08;或超平面&#xff09;&#xff0…...

NotePad++编辑Linux服务器文档

参考资料: 参考文章 相关插件链接:链接: https://pan.baidu.com/s/1PBX9NY0pPz0sBqtfNxngXA 提取码: r3t7 概要: 通常简单的文件编辑,可以直接在Linux服务器,或客户端利用VIM命令编辑,编辑即可 但是过于复杂的文件,比如Mycat的XML编辑,就很不方便,需要利用Notepad++…...

常见小问题(Open Folder as PyCharm Project)

1.删除pycharm鼠标右键快捷键打开项目 winr键打开&#xff0c;输入regedit&#xff0c;运行注册器 找到下面的路径&#xff1a;计算机\HKEY_CLASSES_ROOT\Directory\Background\shell\PyCharm 删除即可...

第四十四节:目标检测与跟踪-模板匹配

一、引言 模板匹配的核心思想是通过在输入图像中搜索与预定义模板最相似的区域来定位目标。这种方法计算效率高、实现简单,特别适用于目标外观变化不大且背景相对简单的场景。本文将深入探讨模板匹配的原理、OpenCV中的实现方法、优化技巧以及实际应用案例。 二、模板匹配基础…...

Trae中使用mcp连接MariaDB

开启mariadb远程权限 -- 登录 MariaDB&#xff08;如果需要密码&#xff0c;会提示输入&#xff09; mysql -u root -p -- 切换到权限管理数据库 USE mysql; -- 创建允许从任何 IP 访问的 root 用户&#xff08;推荐使用强密码&#xff09; GRANT ALL PRIVILEGES ON *.* …...

第12次04 :首页展示用户名

登录后&#xff0c;跳转到首页&#xff0c;首页会展示用户名&#xff1b;未登录时&#xff0c;首页将展示登录与注册的选项。 第一步&#xff1a;index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml…...

MFC: 文件加解密(单元测试模块)

背景&#xff1a; 对敏感配置文件&#xff08;如 XML 格式的配置文件、用户信息等&#xff09;进行加密&#xff0c;防止被人以文本形式直接查看。软件启动前加载加密的配置或资源文件&#xff0c;运行时再进行解密使用&#xff0c;提高逆向破解门槛。在传输 XML 文件&#xf…...

vue+ThreeJs 创建过渡圆圈效果

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“vueThreeJs 创建过渡圆圈效果”。 今天在做着色器过渡效果练习&#xff0c;发现出现了很多新的函数&#xff0c;这些都超出了js之外&#xff0c;需要更多的掌握和学习。以下是自己的复盘和梳理。 1.获取距离 定…...

MySQL:12_视图

视图 跟事务里讲的视图没有任何关系 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 一.基本使用 创建视图 create view 视图名 …...

2025 年开源 LLM 发展趋势细致解读

1. 模型性能的持续跃进与架构创新 到 2025 年&#xff0c;开源 LLM 在性能上不仅持续追赶&#xff0c;甚至在特定任务和评估基准上已经能够与顶级的闭源模型并驾齐驱或展现出独特优势。MoE (Mixture of Experts) 架构的成熟和广泛应用是这一趋势中的核心驱动力之一。 MoE (Mix…...

win11+vs2022 安装opencv 4.11.0图解教程

1. 下载opencv opencv官网下载地址&#xff1a;Releases - OpenCV 2. 双击运行该exe&#xff0c;即可进行安装&#xff0c;安装文件夹可自行选择 安装后目录如下&#xff1a; 3. 配置环境变量 使用win键搜索环境变量&#xff0c;选中系统变量中的Path&#xff0c;然后点击编辑…...

n8n 读写本地文件

1.Docker Desktop 创建容器 docker run -d --name n8n -p 5566:5678 -v D:\docker\n8n_data:/home/node/.n8n -v D:\docker\n8n_files:/home/node/Files n8nio/n8n:latest 参数说明: 1.-d :表示以 detached 模式运行容器(后台运行) 2.--name n8n :指定容器名称为n8n。 3.-p 55…...

详解3DGS

4 可微分的3D高斯 splatting 核心目标与表示选择 我们的目标是从无法线的稀疏SfM点出发&#xff0c;优化出一种能够实现高质量新视角合成的场景表示。为此&#xff0c;我们选择3D高斯作为基本图元&#xff0c;它兼具可微分的体表示特性和非结构化的显式表示优势&#xff0c;既…...

DEBUG设置为False 时,django默认的后台样式等静态文件丢失的问题

1. 处理静态文件&#xff08;解决后台样式丢失&#xff09; 当 DEBUG False 时&#xff0c;Django 不再自动处理静态文件&#xff08;CSS、JS 等&#xff09;&#xff0c;需手动配置&#xff1a; 步骤&#xff1a; 配置 STATIC_ROOT 和 STATIC_URL 在 settings.py 中确保以下…...

如何提高服务器的QPS来应对618活动的并发流量

在电商行业&#xff0c;618大促是继双十一之后最重要的一次“流量大战”。大量用户在短时间内涌入网站下单、抢购&#xff0c;服务器面临前所未有的并发压力。QPS(Queries Per Second&#xff0c;即每秒请求数)作为衡量服务器处理能力的重要指标&#xff0c;直接关系到用户体验…...

LlamaFirewall:开源框架助力检测与缓解AI核心安全风险

LlamaFirewall 是一款面向大语言模型&#xff08;LLM&#xff09;应用的系统级安全框架&#xff0c;采用模块化设计支持分层自适应防御。该框架旨在缓解各类AI代理安全风险&#xff0c;包括越狱攻击&#xff08;jailbreaking&#xff09;、间接提示注入&#xff08;indirect pr…...

java基础知识回顾3(可用于Java基础速通)考前,面试前均可用!

目录 一、基本算数运算符 二、自增自减运算符 三、赋值运算符 四、关系运算符 五、逻辑运算符 六、三元运算符 七、 运算符的优先级 八、小案例&#xff1a;在程序中接收用户通过键盘输入的数据 声明&#xff1a;本文章根据黑马程序员b站教学视频做的笔记&#xff0c;可…...