【一】vuex的数据存储在内存中,页面一刷新就会丢失
vuex中存储的内容:人员信息。
解决办法:
1:人员登陆成功时,将人员信息保存到vuex和sessionStorage里面各一份。
2:页面刷新时,在App.vue里面取出sessionStorage保存的人员信息,并设置到vuex中去。如果路由里面做了根据vuex里面是否有人信息来判断是否登陆的,需要修改为判断sessionStorage里面是否有值,因为刷新时,vuex里面的内容已经消失了,先走的路由,然后进入到App.vue页面中。
// App.vue 改写如下:
<script>
export default {
name: 'App',
created () {
// 解决vuex刷新导致数据丢失的问题
//在页面加载时读取sessionStorage里的状态信息
//console.log('1,app.vue:'+ sessionStorage.getItem('personInfo'));
if (!!sessionStorage.getItem("personInfo")) {
//console.log('2,here');
//this.$store.replaceState(Object.assign({}, this.$store.state.personInfo, JSON.parse(sessionStorage.getItem("personInfo"))))
this.$store.commit('setPersonInfo', JSON.parse(sessionStorage.getItem('personInfo')))
}
}
}
</script>
有的说在使用这个onbeforeunload事件,但是我测试怎么都触发不了。
然后路由判断是否登陆改为:
router.beforeEach((to, from, next) => {
Loading.open('努力奔跑中...');
document.title = to.matched[0].meta.title; //更改各个页面的title
if (to.meta.requireAuth) { // 判断该路由是否需要登录权限
const personInfo = JSON.parse(sessionStorage.getItem('personInfo'));
const personId = personInfo.personId;
if (!!personId) { // 判断当前是否已登陆
next();
} else { // 没有登录,微信授权登陆weixin_auth
//
}
} else {
next();
}
});
自己写的测试例子暂时是这样的,确实是可以解决刷新导致vuex里面的内容丢失问题。