vue路由传参,刷新之后参数还在的问题

Posted DNFYI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue路由传参,刷新之后参数还在的问题相关的知识,希望对你有一定的参考价值。

今天在做项目时遇到一个路由传参问题,跳转页面时,通过query传参了;跳转的目标页面也通过this.$route.query 拿到值了,然后通过传过来的参数去请求接口;但是当刷新页面时,我希望参数不要在请求接口的参数中

一开始的解决方法:用watch来监听路由的变化,如果是从/home跳转过来的,请求接口时就把参数设为上个页面传过来的参数,如果是执行刷新操作,就将参数设为空

moubted(){
    this.servicelist(true) 
},   
watch: {
      $route(to,from){       
           console.log(to,\'---\',from,\'tot11\')
           if(from.path == \'/home\'){
            this.form.list = this.$route.query.list
             this.form.id = this.$route.query.id
           }else{
             this.form.list= []
            this.form.id= \'\'
           }
        this.servicelist(true)   
      }
  },

但是这样有一个问题:第一次带参跳转页面时,路由并没有发生变化,也没有进行监听;返回上一个页面后,再跳转才会监听并打印路由to,from,但是每一次的跳转也是需要进行带参掉接口的

修改如下:使用beforeRouteEnter路由守卫来进行判断,每次进入这个页面的时候都会打印路由参数

moubted(){
    this.servicelist(true) 
}, 
beforeRouteEnter (to, from, next) {
    console.log(to,\'to009\')
    console.log(from,\'from009\')
    next(vm=>{
      if(from.path == \'/home\'){
            vm.form.list= vm.$route.query.list
            vm.form.id= Number(vm.$route.query.id)
          }else{
            vm.form.list= []
            vm.form.id= \'\'
          }
          
            vm.servicelist(true)
       
    })
  },

又出现一个问题:当我每次跳转的时候,他会先执行mouted生命周期里面的方法去调接口(此时参数为空),然后再调一次带参的接口,这时页面显示的还是不带参的数据,虽然不带参的接口是先调的,但可能是数据比较多,后面才赋值上来,所以页面显示的还是不带参的数据

解决:将beforeRouteEnter 里面的方法延迟调用

beforeRouteEnter (to, from, next) {
    console.log(to,\'to009\')
    console.log(from,\'from009\')
    next(vm=>{
      if(from.path == \'/home\'){
            vm.form.list= vm.$route.query.list
            vm.form.id= Number(vm.$route.query.id)
          }else{
            vm.form.list= []
            vm.form.id= \'\'
          }
    setTimeout(()=>{
            vm.servicelist(true)
          },100)
 }) },

解决!

仅此记录下工作中遇到的问题,上述问题如果又更好的解决办法,请各位大佬告知

vue的另一种传参方式:这种方式传参,刷新页面参数也不会丢失

routes: [
    {
      path: \'/list/:serverid\',  // 要在路径里面配置动态参数,否则刷新页面,参数会丢失
      name: \'list\'
    }
]
 
1
this.$router.push({name:\'list\', params:{serverid: id}});
this.$route.params.serverid

 

以上是关于vue路由传参,刷新之后参数还在的问题的主要内容,如果未能解决你的问题,请参考以下文章

路由解耦-解决Vue通过name和params进行跳转页面传参刷新参数丢失的问题

vue路由传参及解决vue路由传参页面刷新参数丢失问题

Vue之路由的query传参加密

路由传参 query 和 params

React路由传参

vue路由传参3种方式