vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue路由传参刷新后数据丢失

vue路由传参刷新后数据丢失问题及解决

作者:weixin_49696014

这篇文章主要介绍了vue路由传参刷新后数据丢失问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

vue路由传参刷新后数据丢失

出现刷新后数据丢失的情况可分为:

首先说一下:

1、路由传参

路由传参可分为query传参和params传参

(1)、query传参,参数会在地址栏中显示,如果你传的是字符串,刷新后页面的数据是不会丢失的,如果传的是对象或者是数组,那么刷新后,页面的数据就会丢失,此时解决的方法是,将复杂数据类型,传的时候转化成字符串,子组件接受的时候再转化过来,这样刷新后就不会丢失啦

(2)、params传参,无论是你参数是字符串还是复杂数据类型,刷新后子组件的页面数据都会丢失

解决办法:

使用params中的路由匹配

使用方式:在router.js,即匹配路由规则的位置,加上占位符即可

{
  path: '/index/:num/:name',
  name: 'index',
  component: Index
}

params中的参数名称需要和占位符的名称一致即可

获取参数,还是和获取params中参数一致:this.$route.params.name

这样的话,参数就会出现在url中,格式为:url/num/name,这种方式将参数放在url上,刷新的时候才不会丢失数据。

综上所述,自己的出的一个小结论:

如果不使用其他方法,只是路由传参,要想刷新后数据不丢失,

你的参数就要出现再url地址中,虽然params传递的参数不出现在url地址,

但是要想解决params传参数据刷新不丢失,还得把参数出现在url地址栏中

2、从vuex获取参数

页面刷新store.state中的数据消失是不可避免的,那么使用localStorage来避免这个问题。

发现问题的时候我就考虑到存数据在localStorage里,但是一个一个数据添加实在是太蠢了。

那么就需要一个全局的方法来,将store的数据存储在localStorage里。

具体的方法也是百度的很好用,也很方便。

在App.vue中,created初始化生命周期中写入以下方法

自己项目中使用的方法

//在页面加载时读取sessionStorage里的状态信息
    if (sessionStorage.getItem('store')) {
      this.$store.replaceState(
        Object.assign(
          {},
          this.$store.state,
          JSON.parse(sessionStorage.getItem('store'))
        )
      )
    }
    //在页面刷新时将vuex里的信息保存到sessionStorage里

    window.addEventListener('beforeunload', () => {
      sessionStorage.setItem('store', JSON.stringify(this.$store.state))
    })

作者的方法

//在页面刷新时将vuex里的信息保存到localStorage里
window.addEventListener("beforeunload",()=>{
  localStorage.setItem("messageStore",JSON.stringify(this.$store.state))
})
 
//在页面加载时读取localStorage里的状态信息
localStorage.getItem("messageStore") && this.$store.replaceState(Object.assign(this.$store.state,JSON.parse(localStorage.getItem("messageStore"))));

两种方法基本一致

最后说一下,为什么vuex刷新后数据会丢失:

其实很简单,因为store里的数据是保存在运行内存中的,当页面刷新时,页面会重新加载vue实例,store里面的数据就会被重新赋值

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文