【vue3|第18期】Vue-Router路由的三种传参方式

日期:2024年7月17日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006

说在最前面:本文 vue3 的示例代码,在没有另外声名的情况下,均采用 <script setup> 组合式代码风格,风格统一,避免混乱,请各位新老食客放心食用哈 ^ _ ^



在这里插入图片描述


一、前言

vue3 中,vue-router 是用来管理前端路由的库路由传参是指在页面间传递数据的一种常用方法,它可以帮助我们在不同的视图组件之间传递状态或数据vue-router 提供了几种不同的方式来实现路由传参,包括 paramsqueryprops

二、Vue-Router的三种传参方式

1、使用params传递参数

params 是在路由配置中定义的动态段,它们不是 URL 的一部分,因此在刷新页面时不会丢失。params 通常用于传递路由路径中的参数。

说明:配置并创建路由
路径:\src\router\index.ts

import {
    createRouter, createWebHistory } from 'vue-router'

// 路由配置
const routes = [
 {
   
 	name:home,
    path: '/home',
    component: HomeView
 },
 {
   
 	name:user,
    path: '/user/:userId',
    // 加?表示该传参为可选参数,如下,age为可选参数:
    // path: '/user/:userId/:age?',    
    component: UserView
 }
];

// 创建路由
const router = createRouter({
   
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: routes
})

export default router

(1)编程式路由传参

(1-1)在组件中使用编程式路由传递参数

路径:\src\views\HomeView.vue

// 在组件中使用编程式路由传递参数
<script setup lang="ts">
import {
    useRouter } from 'vue-router';
const router = useRouter();

router.push({
   
 // params 传递参数方式,不支持使用 path,只能用 name
 name: 'user',
 params: {
    userId: '123' }
});
</script>
(1-2)在目标组件中获取参数

路径:\src\views\UserView.vue

<script setup lang="ts">
import {
    useRoute } from
### 实现 Vue-Router 4.5.0 中的路由参数传递 在 Vue-Router 4.5.0 版本中,可以通过多种方式来实现路由之间的参数传递。以下是几种常见的方法及其具体实现。 #### 使用 `params` 参数传递 通过定义动态路径片段并使用 `$route.params` 来获取这些参数: ```javascript // 定义带参数的路由规则 const routes = [ { path: &#39;/user/:id&#39;, name: &#39;User&#39;, component: UserComponent, }, ]; // 获取 params 参数 import { useRoute } from &#39;vue-router&#39;; export default { setup() { const route = useRoute(); // 打印 id 参数 console.log(route.params.id); } }; ``` 这种方式适用于需要在 URL 地址栏显示参数的情况[^2]。 #### 使用查询字符串 (`query`) 进行传参 当不希望参数出现在 URL 的一部分而是作为附加信息时,可以采用 query 方式: ```javascript // 导航到带有查询参数的目标页面 this.$router.push({ name: &#39;search&#39;, query: { q: &#39;Vue&#39; } }); // 接收方组件内读取查询参数 import { useRoute } from &#39;vue-router&#39;; setup() { const route = useRoute(); // 访问查询参数中的 q 值 console.log(route.query.q); } ``` 此方法适合用于分页、筛选条件等场景下不需要改变历史记录条目的情况。 #### 利用命名视图与嵌套路由组合传递复杂结构化的数据 对于更复杂的多级或多区域布局需求,则可借助于命名视图以及子路由方式来进行更为灵活的数据交换: ```javascript { path: &#39;/&#39;, components: { default: HomeView, user: UserProfile, }, children:[ { path:&#39;profile&#39;, component:ProfileDetail } ] } ``` 上述例子展示了如何在一个父级路由之下设置多个具有不同名称的子视图,并且可以在它们之间共享状态或进一步细化各自的逻辑处理流程[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Commas.KM

码路共同进步,感恩一路有您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值