路由传参的方式有query和params,我是一直以来被误导,有很多人都在说他们的区别的时候 都说,一个可以刷新一个不可以刷新,所说的就是query传参可以刷新,而params不能刷新,真的是这样吗?下面是我总结的,如有不对请指正,或联系我谢谢**
注意**:不是说params就一定不能刷新,如果我们是使用的是 params路由传参的话,客户又不知道,又不懂什么是query,什么是params,你能不让他刷新界面吗显然是不可能的,先看一下他们的 传参方式
假设我们现在需要实现一个路由切换,点击之切换到W组件
并传递一个id值和一个age值
我们运用router-link来写
然后一连串的疑惑就产生了
<router-link :to="{ A: 'xxx', query: { xx:'xxx' }}" />
<router-link :to="{ A: 'xxx', parmas: { xx:'xxx' }}" />
routes:{ ??? }
你可能没有出来一点区别,
**再看一个例子
**所以不是说使用params传参就不能刷新页面的,如果的在路由上做了配置,当然是可以刷新页面的,不要被误导了,
<router-link :to="{ name: 'W', params: { id:'1234',age:'12' }}"/>
这里只能用name不能用path,不然会直接无视掉params中的内容
然后在routes中添加
{
path:'/W/:id/:age',
name:'W',
component:W
}
这里的name与上面router-link中的name保持一致
url就取决于这个path的写法http://localhost:8080/#/W/1234/12
注意,path里面的/w可以任意写,写成/hhhhh也可以
但是!
/:id和/:age不能省略,且不能改名字
不写的话,第一次点击可以实现组件跳转
且可以通过this.$route.parmas.id获取到传过来的id值,但如果
刷新页面,传过来的id值和age值就会丢失
从这也能看出params比query严格
query的话一次是可以传递多个参数的
query:
<router-link :to="{ name: 'W', query: { id:'1234',age:'12' }}"/>
<router-link :to="{ path: '/W', query: { id:'1234',age:'12' }}"/>
name和path都可以用
前者的routes基于name设置
{
path: '/hhhhhhh', //这里可以任意
name: 'W', //这里必须是W
component: W
}
然后就把path匹配添加到url上去
http://localhost:8080/#/hhhhhhh?id=1234&age=12
后者基于path来设置routes
{
path: '/W', //这里必须是W
name: 'hhhhhhhh', //这里任意
component: W
}
url:http://localhost:8080/#/W?id=1234&age=12
这两种方法,都可以自定义path的样式,
不过一个是在router-link to里面定义,一个则是在routes里面定义
在接收参数的时候都是使用this.$route.query.id