vue单页应用在页面刷新时保留状态数据的方法
2019/6/27 7:41:14
本文主要是介绍vue单页应用在页面刷新时保留状态数据的方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在Vue单页应用中,如果在某一个具体路由的具体页面下点击刷新,那么刷新后,页面的状态信息可能就会丢失掉。这时候应该怎么处理呢?如果你也有这个疑惑,这篇文章或许能够帮助到你
一、问题
现在产品上有个需求:单页应用走到某个具体的页面,然后点击刷新后,刷新的页面要与刷新前的页面要保持一致。
这时候就需要我们保存刷新之前页面的状态。
二、一种解决方案
在这个Vue单页应用中,王二是用Vuex作为状态管理的,一开始王二的思路是将Vuex里的数据同步更新到localStorage里。
即:一改变vuex里的数据,便触发localStorage.setItem 方法,参考如下代码:
import Vue from "vue" import Vuex from "vuex" Vue.use(Vuex) function storeLocalStore (state) { window.localStorage.setItem("userMsg",JSON.stringify(state)); } export default new Vuex.Store({ state: { username: "王二", schedulename: "标题", scheduleid: 0, }, mutations: { storeUsername (state,name) { state.username = name storeLocalStore (state) }, storeSchedulename (state,name) { state.schedulename = name storeLocalStore (state) }, storeScheduleid (state,id) { state.scheduleid = Number(id) storeLocalStore (state) }, } })
然后在页面加载时再从localStorage里将数据取回来放到vuex里,于是王二在 App.vue 的 created 钩子函数里写下了如下代码:
localStorage.getItem("userMsg") && this.$store.replaceState(JSON.parse(localStorage.getItem("userMsg"))); //考虑到第一次加载项目时localStorage里没有userMsg的信息,所以在前面要先做判断
这样就能比较圆满的解决问题了。
三、另一种解决方案
以上的解决方法由于要频繁地触发 localStorage.setItem 方法,所以对性能很不友好。而且如果一直同步vuex里的数据到localStorage里,我们直接用localStorage做状态管理好了,似乎也没有必要再用vuex。
这时候王二想,如果有什么方法能够监听到页面的刷新事件,然后在那个监听方法里将Vuex里的数据储存到localStorage里,那该多好。
很幸运,还真有这样的监听事件,我们可以用 beforeunload 来达到以上目的,于是王二在 App.vue 的 created 钩子函数里写下了如下代码:
//在页面加载时读取localStorage里的状态信息 localStorage.getItem("userMsg") && this.$store.replaceState(JSON.parse(localStorage.getItem("userMsg"))); //在页面刷新时将vuex里的信息保存到localStorage里 window.addEventListener("beforeunload",()=>{ localStorage.setItem("userMsg",JSON.stringify(this.$store.state)) })
这样的话,似乎就比较完美了。
2018年03月27日补充:
王二在使用上述方法时,遇到了一个问题,就是:在开发阶段,如果在Vuex里添加新的字段,则新的字段不能被保存到localStorage里,于是上述代码修改如下:
//在页面加载时读取localStorage里的状态信息 localStorage.getItem("userMsg") && this.$store.replaceState(Object.assign(this.$store.state,JSON.parse(localStorage.getItem("userMsg")))); //在页面刷新时将vuex里的信息保存到localStorage里 window.addEventListener("beforeunload",()=>{ localStorage.setItem("userMsg",JSON.stringify(this.$store.state)) })
以上这篇vue单页应用在页面刷新时保留状态数据的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持找一找教程网。
这篇关于vue单页应用在页面刷新时保留状态数据的方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27Ant Design Vue入门指南:轻松搭建美观界面
- 2024-11-27Vue3项目实战:从零开始的完整指南
- 2024-11-27Vue CLI多环境配置资料详解
- 2024-11-27Vue3+Vite资料:新手入门教程
- 2024-11-27Vue3阿里系UI组件资料入门教程
- 2024-11-27如何集成Ant Design Vue的图标资料
- 2024-11-27如何集成Ant Design Vue图标资料
- 2024-11-27Vue CLI多环境配置资料:新手教程
- 2024-11-27Vue3的阿里系UI组件资料入门指南
- 2024-11-27Vue3公共组件资料详解与实战教程