首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue 路由传参 params 与 query两种方式的区别

vue 路由传参 params 与 query两种方式的区别

作者头像
用户6973020
修改2020-02-24 10:05:55
6K0
修改2020-02-24 10:05:55
举报
文章被收录于专栏:视频播放视频播放

初学vue的时候,不知道如何在方法中跳转界面并传参,百度过后,了解到两种方式,params 与 query。然后,错误就这么来了:

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

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

我想用params来传参,是这么写的,嗯~

this.$router.push({
     path:"/detail",
     params:{
               name:'nameValue',
               code:10011
            }
 });

结果可想而知,接收参数的时候:

this.$route.params.code     //undefined

这是因为,params只能用name来引入路由,下面是正确的写法:

this.$router.push({
     name:"detail",
     params:{
              name:'nameValue',
              code:10011
            }  
});

这回就对了,可以直接拿到传递过来的参数nameValue了。

说完了我的犯傻,下面整理一下这两者的差别:

1、用法上的

刚才已经说了,query要用path来引入,params要用name来引入,接收参数都是类似的,分别是this.$route.query.name和this.$route.params.name。

注意接收参数的时候,已经是$route而不是$router了哦!

2、展示上的

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

query:      
params:    

总结:刚学vue的时候,由于没有认真细致的看文档,导致在很多细小的坑里爬不上来,后来自己慢慢的走上正轨的时候,再去看文档,看到了很多原本可以避免的坑

query传参,刷新页面不会丢失参数。但是params会丢参的。
params 和path不能共存 所以只能用name
params传参 需要在 路由配置 path /:id 这样就不会丢参
最重要的一点,params刷新会消失。。。query则不会,params参数只要在路由中声明了就不会消失。
在路由声明了,跟query又有什么区别呢,干嘛不直接query呢,params不会出现在地址栏,更加美观。
路由声明path里加上参数(冒号加参数名称)比如 /article/:articleId/:articleType 这样你通过params传递的articleId和articleType就会在路由路径里。

$router是路由对象,是一个只写的对象
$route是当前路由的信息对象,是一个只读的对象

一些需要注意的事

  • 使用query传参的话,会在浏览器的url栏看到传的参数类似于get请求,使用params传参的话则不会,类似于post请求。
  • 如果提供了path,params将会被忽略(即如果要使用params传参,则一定要使用name),但是query不属于这种情况。如果使用完整路径和query传参,刷新页面时不会造成路由传参的参数丢失。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • query:      
  • params:    
  • 一些需要注意的事
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档