Vue Router 4 路由操作 - 路由的参数传递与接收
toqiye 2024-10-01 22:59 1 浏览 0 评论
什么是路由参数?
Vue Router提供了两种参数传递的模式,params模式 与 query模式。
params模式
路径参数用 冒号: 表示,当一个路由被匹配成功,它的params值将被保存到路由地址的params属性中,在接收的时候,通过 router.params 就可以拿到传递的参数。
// 定义如下两个路由Test和Test1,并给Test路由配置参数
// router/index.js
const routes = [{
path: '/test/:id,
name: 'Test',
component: () => import('@/views/test/Test.vue')
}, {
path: '/test1,
name: 'Test1',
component: () => import('@/views/test/Test1.vue')
}]
// 如果Test1路由,想要跳转到Test路由,并且传递参数,如下操作
// views/test/Test1.vue
router.push({
name: 'Test',
params: {
id: 1
}
})
// 在Test路由对应的Test组件中,使用如下方式获取到传递的参数
// views/test/Test.vue
const id = router.params.id // 1
query模式
路径参数是以 问号?开头,以 &符号 分割的 序列化字符串,例如:/test2?name=12&id=3
当对应的路由被匹配,它的query值将被保存到对应路由地址的query属性中,通过 router.query 即可拿到对应的参数。
// 定义如下两个路由Test2和Test3
// router/index.js
const routes = [{
path: '/test2',
name: 'Test2',
component: () => import('@/views/test/Tes2.vue')
}, {
path: '/test3,
name: 'Test3',
component: () => import('@/views/test/Test3.vue')
}]
// 如果Test3路由,想要跳转到Test2路由,并且传递参数,如下操作
// views/test/Test3.vue
router.push({
name: 'Test2',
query: {
name: 12,
id: 3
}
})
// 在Test2路由对应的Test2组件中,使用如下方式获取到传递的参数
// views/test/Test2.vue
const id = router.query.id // 3
const name = router.query.name //12
路由之间的参数传递与接收
在路由导航的时候,我们只能通过 router.push 传递参数,其他的方式均无法传递参数。
router.push 的参数可以有 四种形式,并且前三种形式是等价的。
// 1.路径字符串形式的路由地址
router.push('/test2?name=12&id=3')
// 2. path + query 方式的路由地址,
// 注意,此方式下,path不能传递params模式的参数
router.push({
path: '/test2',
query: {
name: 12,
id: 3
}
})
// 3. name + query 方式的路由地址
router.push({
name: 'Test2',
query: {
name: 12,
id: 3
}
})
// 4. name + params 方式的路由地址
// 注意,此方式下,需要在路由记录中配置动态参数占位符,例如:path: '/test2/:name/:id'
router.push({
name: 'Test2',
params: {
name: 12,
id: 3
}
})
路由向组件的参数传递与接收
路由向组件传递参数的方式和路由之间的传递参数方式是一致的,只是在接收参数的时候有所区别。
组件对外暴露属性的方式是通过props方式进行的,所以,路由向组件传参,即是路由向props传递参数。
我们只需要在routes中配置props相关参数即可实现路由向组件传参,官方文档提供了如下四种配置方式。
布尔模式
当路由记录的props属性被设置为true时,路由地址中的router.params将被转为组件的props中的属性。
// router/index.js
// 当props被设置为true时,router.params将被转为组件的props中的属性
const routes = [{
path: '/test2/:name/:id',
name: 'Test2',
component: () => import('@/views/test/Tes2.vue'),
props: true
}]
// 在Test2.vue中的props可定义如下
// views/test/Test2.vue
const props = defineProps({
name: [String, Number],
id: Nuber
})
命名视图
对于有命名视图的路由,必须给每一个命名视图路由定义props配置。
// router/index.js
// 需要注意的是,在多个命名视图中,
// 我们必须将命名视图对应的参数一一定义在路由对应的path中
// 例如 /test2/:name/:id/:title
const routes = [{
path: '/test2/:name/:id/:title',
name: 'Test2',
components: {
default: () => import('@/views/test/Tes2.vue'),
SideBar: () => import('@/views/test/SideBar.vue')
},
props: {
default: true,
SideBar: true
}
}]
// 在Test2.vue中的props可定义如下
// views/test/Test2.vue
const props = defineProps({
name: [String, Number],
id: Nuber
})
// 在SideBar.vue中的props可定义如下
// views/test/SideBar.vue
const props = defineProps({
title: String
})
对象模式
如果路由记录中的props是一个对象,会直接将该对象设置为组件的props。
// router/index.js
// 注意,此模式下,不需要用过router.push传参
const routes = [{
path: '/test2',
name: 'Test2',
component: () => import('@/views/test/Tes2.vue'),
props: {name: 12, id: 3}
}]
// 在Test2.vue中的props可定义如下
// views/test/Test2.vue
const props = defineProps({
name: [String, Number],
id: Nuber
})
函数模式
路由记录中的props的值也可以是一个函数,它将返回一个props跟组件的props对应,可以看做是对象模式的进阶版。
// router/index.js
// 注意,此模式下,即可以处理router.push传递的参数,也可以不传值,使用静态数据
const routes = [{
path: '/test2/:name/:id',
name: 'Test2',
component: () => import('@/views/test/Tes2.vue'),
props: route => ({...route.params, title: 'this is title'})
}]
// 在Test2.vue中的props可定义如下
// views/test/Test2.vue
const props = defineProps({
name: [String, Number],
id: Nuber,
title: String
})
总结
在使用router.push导航时,建议使用name + query 或者 name + params的方式传递参数,增加项目的可维护性。
相关推荐
- 完美解决MAC电脑空间不足问题(完美解决mac电脑空间不足问题的办法)
-
很多用MAC(苹果笔记本)电脑的人,特别是做iOS开发的,都会遇到一个头疼的问题,那就是电脑磁盘空间不足的问题。这个问题也困扰了我好久,我的开发机是256G的SSD(固态硬盘),但是用着用着就会空间不...
- 系统清理软件Omni Remover for Mac版
-
内容介绍你是否需要一款可以帮你清理Mac系统顽固垃圾的工具呢?试试OmniRemoverforMac吧!OmniRemoverMac版是一款运行在Mac平台上的系统清理软件。OmniRem...
- mac上一款好用的多功能系统清理软件Omni Remover for Mac
-
mac上一款好用的多功能系统清理软件——OmniRemoverforMac。OmniRemovermac破解版是Mac平台上的一款软件清理工具。OmniRemoverMac版专为优化内存...
- 清理重建mac OS图标缓存(mac系统清空)
-
关于macos缓存问题你了解多少?今天macdown小编带大家了解下有关Mac清除图标缓存的相关知识!你知道吗?为了提升图形界面加载速度,默认情况下macOS针对Finder和Dock中的...
- iOS 9 人机界面指南(五):图标与图形设计
-
来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。文章索引5.1图标与图像尺寸(IconandImageSizes)5.2应用图标(AppIcon)5.2....
- 你中招了吗?盘古团队发布XcodeGhost病毒检测应用
-
最近大批知名iOS应用被感染XcodeGhost病毒事件闹得沸沸扬扬,虽然该病毒作者发表声明称,XcodeGhost源于自己的实验,没有任何威胁性行为,同时公开了源代码。但依然无法消除众多用户的担忧,...
- iOS应用感染Xcode真是无恶意实验?感染APP最新名单及版本号
-
前瞻科技快讯9月19日消息,一向号称是最安全的iOS真的不安全了?对于这两天闹得沸沸扬扬的多款iOS应用感染XcodeGhost病毒事件,今日凌晨4点左右,网友@XcodeGhost-Author在微...
- 苹果应用签名失败怎么处理(ios应用签名什么意思)
-
在移动应用开发过程中,苹果应用签名失败是一种常见的问题,它可能由多种原因引起。本文将介绍一些处理苹果应用签名失败的方法,帮助开发者解决这个问题。检查证书和描述文件:首先,开发者应该检查使用的证书和描述...
- 好用的系统扫描和清理工具推荐:OS Cleaner Pro for Mac
-
为大家推荐一款全面的系统扫描和清理工具,OSCleanerProforMac...
- 系统清理软件 Omni Remover for Mac
-
你是否需要一款可以帮你清理Mac系统顽固垃圾的工具呢?试试OmniRemoverforMac吧!OmniRemoverMac版是一款运行在Mac平台上的系统清理软件。OmniRemover...
- 优秀的Mac系统清理软件(mac清理系统占用空间)
-
OmniRemoverforMac是一款优秀的系统清理软件,功能有清洁卸载膨胀且顽固的应用程序,在macOSCatalina上清除32位不兼容的应用程序,iTunes,Xcode和Sketc...
- 苹果app安卓apk应用内用微信登录游戏时会显示登录失败怎么解决?
-
解决苹果iOS应用和安卓APK应用在使用微信授权登录时出现“登录失败,签名不一致”的问题,可以按照以下步骤进行排查和解决:1.核实AppID和AppSecret:确保iOS和安卓项目中使用的微信开放...
- Cleaner for Xcode(遗留废弃文件清理工具)
-
Mac上的Xcode总是占用很大空间,并且用的时间越久越大!可通过删除不需要的和不建议使用的文件来帮助您加快Xcode的运行速度,你可以每月或者每周运行一次进行清理。有需要的朋友,赶快来下载吧~Cle...
- Cleaner for Xcode mac(xcode清理工具)
-
Xcode文件太多,如何检测清理?试试CleanerforⅩcode吧!CleanerforXcodeforMac可以检测您的Xcode占用磁盘的情况,统计各个部件所占用的空间。并帮助您...
- 柠檬清理一款Mac设备必备的实用工具
-
简介柠檬清理是针对macOS系统专属制定的清理工具。主要功能包括重复文件和相似照片的识别、软件的定制化垃圾扫描、可视化的全盘空间分析、内存释放、浏览器隐私清理以及设备实时状态的监控等。重点聚焦清理功能...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 完美解决MAC电脑空间不足问题(完美解决mac电脑空间不足问题的办法)
- 系统清理软件Omni Remover for Mac版
- mac上一款好用的多功能系统清理软件Omni Remover for Mac
- 清理重建mac OS图标缓存(mac系统清空)
- iOS 9 人机界面指南(五):图标与图形设计
- 你中招了吗?盘古团队发布XcodeGhost病毒检测应用
- iOS应用感染Xcode真是无恶意实验?感染APP最新名单及版本号
- 苹果应用签名失败怎么处理(ios应用签名什么意思)
- 好用的系统扫描和清理工具推荐:OS Cleaner Pro for Mac
- 系统清理软件 Omni Remover for Mac
- 标签列表
-
- systemproperties (65)
- show-overflow-tooltip (53)
- canvas图片 (57)
- npm版本管理 (61)
- localhost:15672 (59)
- materialtheme (86)
- node-ssh (68)
- 全局路由守卫 (57)
- springbootcachemanager (57)
- 图床搭建 (62)
- vue3addeventlistener (60)
- mybatisselectone (78)
- css圆形进度条 (69)
- androidble蓝牙开发 (62)
- vue-router的实现原理 (53)
- usememo (53)
- log4j.xml (54)
- maven跳过测试打包 (57)
- npmjsencrypt (55)
- android-gif-drawable (60)
- appender-ref (64)
- springbootmockito (68)
- css边框渐变色和圆角 (58)
- gsonfastjson (59)
- 依赖注入的方式 (62)