Vue 深入学习param和query两种传参方式及其区别

前言:

路由传参的时候,有俩兄弟,一个叫query,一个叫parmas;你说他们俩长得也不像吧,可这用法实在是太类似了。

下面就让我们从vue路由讲他们的区别

vue路由中的传参:

假设我们现在需要实现一个路由切换,点击之切换到W组件;并传递一个id值和一个age值

我们运用router-link来写。

然后一连串的疑惑就产生了

<router-link :to="{ A: xxx, query: { xx:xxx }}"/>
<router-link :to="{ A: xxx, parmas: { xx:xxx }}"/>
routes:{ ??? }

对于query和parmas来说:

  1. A用name还是path?
  2. routes要怎么写?
  3. url长什么样?
  4. 会有什么隐藏的坑么

### 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

### parmas ###

<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有代验证!!!!!!!!!!!

router文件下index.js里面,是这么定义路由的:

{
   path:"/detail",
   name:"detail",
   component:home
}

1、传参方式

query传参方式:query要用path来引入路由;

this.$router.push({
   path: "/detail",
   query: {code:"123"}
})

param传参方式:param要用name来引入路由;

this.$router.puth({
   name: "detail",
   param: {code: "123"}  
})

2、取值:

获取query传参的方式

this.$route.query.code //123

获取param 传参的方式

this.$route.param.code //123

3、区别:

1、用法上:

  query要用path来引入,params要用name来引入,接收参数都是类似的,分别是this.$route.query.code和this.$route.params.code。

2、展示上:

query更加类似于我们ajax中get传参,params则类似于post,说的再简单一点,前者在浏览器地址栏中显示参数,后者则不显示;

query:

param:

或者:

使用query传参的方式类似于get交互,传的参数在路由中显示,可以用作刷新后仍然存在参数。

使用param传参的方式类似于post交互,传的参数不会出现在路由中,界面刷新后传参就不存在。

也就是说传参跳转页面时,query不需要再路由上配参数就能在新的页面获取到参数,使用params不在路由配参数跳转,只有第一次进入页面参数有效,刷新页面参数就会消失。

注意要点:query与param两种传参,最大区别是 传参方式不一样,传的参数是否能在路由中显示,能否刷新后仍然传参

经验分享 程序员 微信小程序 职场和发展