当前位置:   article > 正文

vue-router 路由跳转传参刷新页面后参数丢失问题_vue跳转后路由刷新浏览器参刷新页面参数丢失

vue跳转后路由刷新浏览器参刷新页面参数丢失

常见场景:点击列表详情,跳转到详情内页,传递id参数获取详情数据。

我们先来看看路由跳转的几种方式:

1、通过params方式传参

通过$route.push的path携带参数方式(路由配置中指定参数)

  1. // 路由配置
  2. {
  3. path: '/detail/:id', //若id后面加?代表这个参数是可选的,即使不传id也不会导致页面无法访问
  4. name: 'detail',
  5. component: Detail
  6. }
  7. // 列表中跳转
  8. this.$router.push({
  9. path:`/detail/${id}`
  10. })
  11. // 详情页获取参数
  12. this.$route.params.id

注意:这种方式参数是以/id跟在url后,刷新页面后参数不会丢失。

通过$route.push的params传参(路由配置中未指定参数)

  1. // 列表中跳转
  2. this.$router.push({
  3. name:'detail',
  4. params:{
  5. id:id
  6. }
  7. })
  8. // 详情页获取参数
  9. this.$route.params.id

注意:这种方式的传参,必须使用name进行跳转,未在路由配置:id,url后不会显示id,刷新页面后参数会丢失。

2、通过query方式传参

  1. // 路由配置
  2. {
  3. path: '/detail',
  4. name: 'detail',
  5. component: Detail
  6. }
  7. // 列表中跳转
  8. this.$router.push({
  9. path:'/detail',
  10. query:{
  11. id:id
  12. }
  13. })
  14. // 详情页获取参数
  15. this.$route.query.id

注意:这种方式的参数以?id跟在url后,类似get传参,并且,query必须使用path进行传参。刷新页面后参数不会丢失。

传递的参数是对象或数组

还有一种情况就是,如果通过query方式传递的是对象或数组,在地址栏中会被强制转换成[object Object],刷新后页获取不到对象值。

那么我们可以通过JSON.stringify()方法将参数转换为字符串,在获取参数时通过JSON.parse转换成对象。

  1. let parObj = JSON.stringify(obj)
  2. // 路由跳转
  3. this.$router.push({
  4. path:'/detail',
  5. query:{
  6. obj:parObj
  7. }
  8. })
  9. // 详情页获取参数
  10. JSON.parse(this.$route.query.obj)

注意:这样虽然可以传对象,但是如果数据多的话地址栏会很长(不太推荐)。

3、使用props配合组件路由解耦

路由配置中指定参数:id

  1. // 路由配置
  2. {
  3. path:'/detail/:id',
  4. name:'detail',
  5. component:Detail,
  6. props:true // 如果props设置为true,$route.params将被设置为组件属性
  7. }
  8. // 路由跳转
  9. this.$router.push({
  10. path:`/detail/${id}`
  11. })
  12. // 详情页获取参数
  13. export default {
  14. props:['id'], // 将路由中传递的参数id解耦到组件的props属性上
  15. mounted(){
  16. console.log("id",this.id);
  17. }
  18. }

路由配置中未指定参数:id

  1. // 路由配置
  2. {
  3. path:'/detail',
  4. name:'detail',
  5. component:Detail,
  6. props:true // 如果props设置为true,$route.params将被设置为组件属性
  7. }
  8. // 路由跳转
  9. this.$router.push({
  10. name:'detail',
  11. params:{
  12. order:{
  13. id:'123456789',
  14. name:'商品名称'
  15. }
  16. }
  17. })
  18. // 详情页获取参数
  19. export default {
  20. props:['order'], // 将路由中传递的参数order解耦到组件的props属性上
  21. mounted(){
  22. console.log("order",this.order);
  23. }
  24. }

注意:路由配置中指定参数:id的,页面刷新后参数不会丢失,在路由配置未指定参数的,使用params跳转传参页面刷新后参数会丢失

此外,数据量比较大的参数,可以使用sessionStorage或localStorage来进行存储参数来解决页面刷新参数丢失的问题,具体结合实际项目即可。

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/285120
推荐阅读
相关标签
  

闽ICP备14008679号