cookie 操作记录& vuex 中页面刷新 state 数据丢失的问题

1. 在vue 中创建一个util.js 文件保存如下cookie 操作,在使用的时候,只需要直接引入就可操作,这里记录下来,以后可以方便的使用

 1 //获取cookie、
 2     export function getCookie(name) {
 3         var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
 4         if (arr = document.cookie.match(reg))
 5         return (arr[2]);
 6         else
 7         return null;
 8    }
 9  
10    //设置cookie,增加到vue实例方便全局调用
11    export function setCookie (c_name, value, expiredays) {
12         var exdate = new Date();
13         exdate.setDate(exdate.getDate() + expiredays);
14         document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
15    };
16  
17     //删除cookie
18     export function delCookie (name) {
19         var exp = new Date();
20         exp.setTime(exp.getTime() - 1);
21         var cval = getCookie(name);
22         if (cval != null)
23         document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
24    };

2. 今天在进行vuex 操作的时候,遇到一个问题,就是保存在vuex 中的数据,在别的页面中无法取到对应的值,因为好久没有做vue 的项目了,一开始还以为自己调用方法写错了,最后发现,是自己使用了url 来直接 访问,这样就会形成实际的页面刷新,所以数据取不到。一直调试了很久,后来有一次使用了页面的导航来访问别的页面,就能取到 vuex 中保存的值了。因为vue-router 使用的是history 的页面无刷新方式来形成路由映射,访问到对应的页面。当使用url 在地址栏直接回车来访问的时候,就形成了实际的页面刷新。要解决这个问题,可以在页面将要卸载时,先把vuex 中的state 保存到本地,然后再页面再次加载的时候,使用本地的数据替换vuex 中的state。这样就可以了,使用sessionStorage 或者 localStorage 来保存都是可以的。具体如下:

 1 export default {
 2   name:"App",
 3   created() {
 4 
 5     //在页面加载时读取sessionStorage里的状态信息
 6     if (sessionStorage.getItem("tastore")) {
 7       this.$store.replaceState(
 8         Object.assign(
 9           {},
10           this.$store.state,
11           JSON.parse(sessionStorage.getItem("tastore"))
12         )
13       );
14     }
15     //在页面刷新时将vuex里的信息保存到sessionStorage里
16     window.addEventListener("beforeunload", () => {
17       sessionStorage.setItem("tastore", JSON.stringify(this.$store.state));
18       
19     });
20   },
21 };

以上代码经过测试,可以放心使用

http://www.cnblogs.com/huanying2015 博客随笔大多数文章均属原创,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利
原文地址:https://www.cnblogs.com/huanying2015/p/14654462.html