vue-router的传参与取参汇总

一. params方法

1.通过router-link传参与params取参

通过path中设置:id,目的是以后会往/foo后面添加一个id值,如/foo/id
例:
const router = new VueRouter({
				routes: [
					{	
						path:'/foo/:id',
						component:Foo
					}
				]
	})


<router-link to="/foo/5">foo</router-link>
<router-view/>


var Foo = {
			template: '<div>Foo路由{{$route.params}}</div>',
		}


这样就可以通过$route.params取得一个存有id的对象
如:(注意红色标记)

在这里插入图片描述

在这里插入图片描述

这样通过$route.params.id就可以获取<router-link to="/foo/5">foo</router-link>
中的id:5,当然也可以传更多的值,如name值

<router-link to="/foo/5/tom">foo</router-link>

routes: [
	{	
		path:'/foo/:id/:name',
		component:Foo
	}
		]

在这里插入图片描述

2.通过编程式路由传参与params取参

通过编程式路由,其实我们使用的时候内部就是调用编程式路由。
编程式路由可以用在js代码里面,如this.$router.push(‘/foo’)
例:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

那么该如何传参和取参呢?
一种方式是和router-link一样,不同的是在push里面匹配路径,
如:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

另一种方式是通过路由规则的name值,首先得在设置路由规则的name值如:

在这里插入图片描述

再调用this. r o u t e r . p u s h , 其 实 调 用 t h i s . router.push,其实调用this. router.pushthis.router.push(‘/foo’)就是调用
this.$router.push({
path:’/foo’
})
在这个对象里面还有另外的参数,如params对象,看到这里应该就懂了,可以往params对象里面添加参数:

在这里插入图片描述
这时再调用$route.params就可以获取params对象的值
如:(注意红色标记)
在这里插入图片描述
你会发现url路径与上面两种方式不同,没有了id和name值,类似我们表单传值的post方法。
使用name值的方式连在路由规则里面预先填入值都不用了,直接可以使用

当然,如果怕会混乱,要预先填入也是可以的,如

在这里插入图片描述
在这里插入图片描述

那么有人会问,可不可以直接通过path加params的方式传参呢?答案是不行,官方文档也说了

在这里插入图片描述

我们也可以来测试下:
在这里插入图片描述

在这里插入图片描述
结果:

在这里插入图片描述
取不到$route.params的值,可能有人会说,可能得在路由规则里面预先填入id和name的值,这样才能取到?
但是这样连路由都进不去,因为根本匹配不到这样的路由,我们是通过path的方式,path其实就是跳转对应的url路径,而这个路径根本匹配不了路由规则里面的格式

在这里插入图片描述
所以就进不了路由

在这里插入图片描述

总结:
通过params取参有两种方式,一种是先在路由规则里面预留需要传进的参数,
如何通过<router-link> 或者编程时路由传参,需补全path的值,
如id或者name第二种是通过设置路由规则的name值,
这时就不用再预留参数了(要预留也可以,见上文)
只需通过编程时路由的params对象传入对应参数的键值对即可

二.query方法

query方法获取参数就相对简单了,直接通过在url里面?id=1&name=tom,再通过$route.query即可获取id和name值

1.通过router-link传参与query取参

这种方式无需在路由规则里面预留参数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.通过编程时路由传参与query取参

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这再补充一点关于编程时路由与普通<router-link to=””>的知识点:
其实两者基本是一样的,你可以在router-link中的to属性中加入name值或者params对象,不过需要用v-bind绑定如:

<router-link  v-bind:to="{ name: ‘foo’, params: {id: 1 }}">foo</router-link>

这跟代码调用 router.push() 是一回事:

$router.push({ name: ‘foo’, params: { id: 1 }})

官网文档地址:https://router.vuejs.org/zh/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值