网站首页 > 博客文章 正文
params传参
与前文的query传参,代码基本一致,只列出不一样的地方。
Staff.vue:
<router-link
:to="{
name: 'staffInfo',//只能用name,别用path
params: {
id: staff.id,
name: staff.name,
age: staff.age
}
}">{{ staff.name }}</router-link>
注意:与query不同,params传参,必须使用name,不能使用path!
前文设置路由的时候说每个路由的“name”是选配,但还是都给配上,就是为了此处使用。
StaffInfo.vue:
const { params } = toRefs(route)
{{ params.id }}
前文toRefs出来的是query,这里就是params。
修改路由配置router/index.ts:
{
path: '/staff',
name: "staff",
component: Staff,
children: [
{
path: 'info/:id/:name/:age?',
name: "staffInfo",
component: StaffInfo
}
]
}
StaffInfo的路由配置写法有了不同,主要是path。?代表可选。
query与params传参的区别以及适用场景,大家有兴趣可以搜一下或者问AI,我就不在这里水字数了。
不过大家只需要记住一点,二者的根本区别在于URL形成的最终形式,即:
- query传参:/staff/info?id=1&name=leo&age=35
- params传参:/staff/info/1/leo/age
props传参
前面使用了query、params传参,在页面显示的时候基本上就是:
const route = useRoute()
{{ route.query.id }}
//或者
const { query } = toRefs(route)
{{ query.id }}
属性前面总是有前缀,如果我们想直接用{{id}}这种形式,就需要用到props。
不过涉及到props的知识点,应该放在本文前面讲比较合适,主要涉及到组件基础、组件通信。而组件通信又有很多方案,要花不少篇幅来讲,而且又能衍生出状态管理器(Vuex、Pinia),太多了。
本节就简单地说一下如何用props传参。
修改router/index.ts:
children: [
{
path: 'info/:id/:name/:age?',
name: "staffInfo",
component: StaffInfo,
props: true
}
]
在路由上设置`props: true`,props只能映射params参数,但不能映射query。
Staff.vue的写法与上节params传参的写法相同。
StaffInfo.vue:
<template>
<div class="staffInfo">
<ul>
<li>主键:{{ id }}</li>
<li>姓名:{{ name }}</li>
<li>年龄:{{ age }}</li>
</ul>
</div>
</template>
<script lang='ts' setup name='StaffInfo'>
defineProps(['id', 'name', 'age'])
</script>
如果想prpos能映射query,修改router/index.ts:
children: [
{
path: 'info/:id/:name/:age?',
name: "staffInfo",
component: StaffInfo,
props(route: any) {
return route.query
}
}
]
Staff.vue的写法与上节query传参写法相同。StaffInfo.vue不变。
还可以更复杂一些,使用函数类型:
children: [
{
path: 'info/:id/:name/:age?',
name: "staffInfo",
component: StaffInfo,
props:(router:any)=>({
id:router.params.id,
name:"默认姓名",
age:router.query.age
})
}
]
可以传params、query、静态常量。实际工作中应该没这么写的,我这里就是展示一下可能性。
注意:无论是params、query还是props方式传参,都无法传递复杂的对象、对象数组。可以传string、number、boolean或者这些类型的数组。
如果非要传对象或对象数组,要么将其转为JSON字符串,接收方再反序列化(JSON.stringify、JSON.parse)。要么用URLSearchParams手工处理。这两种方法大家可以搜一下具体的代码实现,本文就不赘述了。
不过这些都太麻烦,也不优雅。实际工作中,多是传递唯一标识(id),接收方从状态管理库(Vuex、Pinia)或者通过API从服务端获取具体的数据。
- 上一篇: 10个实例小练习,快速入门熟练 Vue3 核心新特性(一)
- 下一篇:已经是最后一篇了
猜你喜欢
- 2025-05-24 10个实例小练习,快速入门熟练 Vue3 核心新特性(一)
- 2025-05-24 怎么在 vue 中使用 form 清除校验状态?
- 2025-05-24 Vue3.5正式上线,父传子props用法更丝滑简洁
- 2025-05-24 vue.js中mounted
- 2025-05-24 11、Refs:直接操控元素——React 19 DOM操作秘籍
- 2025-05-24 Vue3 响应式编程:深度剖析 ref 与 reactive 的正确打开方式
- 2025-05-24 vue3中到底使用Ref还是Reactive,我和同事吵起来了
你 发表评论:
欢迎- 379℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 373℃用AI Agent治理微服务的复杂性问题|QCon
- 365℃IT全明星|IntelliJ IDEA学习笔记(四、idea中怎么创建maven项目)
- 364℃初次使用IntelliJ IDEA新建Maven项目
- 358℃Maven技术方案最全手册(mavena)
- 355℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 352℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 352℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)