vue-Router如何传参以及解决params传参页面刷新导致params参数清空的问题

路由传参

vue中路由传参的参数主要有两种:query与params参数。
首先介绍一下两种的的使用方式与区别吧。
query参数,可以使用path(要跳转的目标路由),与name(要跳转的目标路由组件的名称,因此要在路由中添加name)两种方式 。例如:
我在当前路由要跳转到目标路由/songsDetail中,且用传递query参数。首先配置路由为:

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
const router = new Router({
 {
      path:'/login',
      name:'Login',
      component:Login
    },
 {
      name:'SongsDetail',
      path:'/songsDetail',
      component:SongsDetail,
    }
})
export default router

由于使用的是query参数,因此name可以不写,可以使用path进行传参。
如果使用了router-link进行路由跳转,那么可以使用to进行路由跳转并传参:

<!-- 使用path进行传参 -->
<router-link  :to="{path:'/songsDetail',query:{id:item.id}">
  </router-link>
   <!-- 使用name进行传参 -->
   <router-link  :to="{name:'SongsDetail',query:{id:item.id}">
  </router-link>

以上两种方式都能进行路由传参。
如果要使用params参数,那么不能使用path,只能使用name,

   <router-link  :to="{name:'SongsDetail',params:{id:item.id}">
  </router-link>

当然,这里是使用router-link进行路由跳转,我们还能使用this.$router.push()this.$router.replace()进行路由跳转并传参,传参方式与上述一样。

this.$router.push({path:'/songsDetail',query:{id:item.id})
this.$router.replace({"{path:'/songsDetail',query:{id:item.id}"})

当然也可以同时传query与params参数。但 必须使用name

<router-link  :to="{name:'SongsDetail',query:{id:item.id},params:{id:item.id}" >
  </router-link>

好,介绍完query参数与params参数,接下来就说说它们的区别吧。

query参数与params参数的区别,与params参数清空的解决方法

使用query参数时,在路由跳转完后,其参数会显示在url的后面 ,如果参数较多会导致url过长。但页面刷新时,query参数不会被清空 。
而使用params参数时,在路由跳转完后,其参数不会显示在url的后面。但页面刷新或者回退时,params参数会被清空。因此,要想保留params参数,需将其保存在localStorage中。 在 created 生命周期时先获取缓存数据,在页面销毁时删除缓存。

export default {
  data () {
    return {
      testData: {}
    }
  },
  created () {
    const tempData = localStorage.getItem('tempData')
    if (tempData) {
      this.testData = JSON.parse(tempData)
    } else {
      this.testData = this.$route.params

      localStorage.setItem('tempData', JSON.stringify(this.$route.params))
    }
  },
  beforeDestroy () {
    localStorage.removeItem('tempData')
  }
}
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值