详解刷新页面vuex数据不消失和不跳转页面的解决


Posted in Javascript onJanuary 30, 2018

先说点什么

vuex和路由拦截这一块捣鼓的有一段时间了,总算是爬出来了,特地来分享一下,首先声明没有什么基础介绍,用的是登录状态存储sessionStorage的方法!!!

进入正题

刷新

刷新相当与重启项目,之前获取到的数据也只是通过store暂存起来,项目关闭时就不见了,这有些像电脑重启,存储在RAM的数据会消失。但是储存在sessionstorage、localstorage和cookie里的内容不会消失.

Vuex

方法思路

首先得熟悉vuex,官网中介绍 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,也就是说vuex中的store中的数据都是临时的,都是一些变量,页面刷新重新加载,所有都清空,并且已经在页面中没有进行二次登陆,vuex中就一直是空的,所以就分生出了几个方法

1.因为sessionstorage(关闭页面会消失)、localstorage和cookie刷新页面数据不会消失,所以可以把所有请求到的数据都储存在里边,用的时候再取

2.使用vuex插件

3.登录的时候把token和登录状态(自定义的)赋值给sessionstorage,当刷新页面的时候(路由跳转)从 sessionstorage中获取token和登录状态赋值给store,就会自己重新请求相关页面的数据

我思考过后我选择了方法3,只不过这个方法要和路由拦截结合起来,后面路由完事一起贴代码

代码

index

详解刷新页面vuex数据不消失和不跳转页面的解决

actions

// 登录
 Login({ commit, state }, userInfo) {
  return new Promise((resolve, reject) => {
   login(userInfo).then(response => {
    let token = response.data.token;
    commit('SET_TOKEN', token);
    sessionStorage.setItem('token', token);  //获取到新的token的时候赋值给sessionStorage

    commit('SET_ISLOGIN', true);  // 登录成功修改store中的登录状态
    resolve()
   }).catch(error => {
    reject(error)
   })
  })
 },

路由

简单介绍: 路由拦截就相当于路由的'生命周期',在路由的不同时间段插入一个方法,可以在此时间段想要做什么事情,本次只在路由跳转前搞事情,所以只使用router.beforeEach((to, from, next) => { // ... })即可,具体内容官网都很详细

main.js

router.beforeEach((to, from, next) => {
 let isLogin = sessionStorage.getItem('isLogin');
 let token = sessionStorage.getItem('token');
 let id = sessionStorage.getItem('id');
 if (to.meta.requireAuth) {  // 判断是否有权限
  if (!store.state.isLogin && !isLogin && to.path !== '/login') {  // store和sessionStorage中登录状态都为false并且跳转到 不是登录的页面时 都强行跳转到登录页面  
   next({
    path: '/login',
   });
  } else if (!isLogin && to.path !== '/login') {  // 已经在登录页面进入首页的时候
   sessionStorage.setItem('isLogin', store.state.isLogin);
   next();
  } else if (isLogin && to.path !== '/login') {  // 登录进入后刷新页面时
   store.commit('SET_TOKEN', token);
   store.commit('SET_ISLOGIN', isLogin);
   store.commit('SET_ID', id);
   next();
  } else {
   next();
  }
 }
 else {
  next();
 }
});


1.路由拦截我是写在main.js文件中的,要注意 一定要写在vue挂载的上面(new Vue)
2.当点击登录的时候 actions中的登录方法要早于路由拦截
3.退出的登录的时候 不要忘记把sessionStorage里的变量删除

最后再说点什么

希望本文可以给你提供一些帮助,这是我最高兴的,觉得我有写的不对或者有问题的地方也请帮我指正出来,大家互相帮助互相进步!!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
比较简单实用的使用正则三种版本的js去空格处理方法
Nov 18 Javascript
jquery获取input的value问题说明
Aug 19 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
Nov 30 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
Jun 24 Javascript
javascript数组操作方法小结和3个属性详细介绍
Jul 05 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
Sep 17 Javascript
浅谈javascript的闭包
Jan 23 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
May 20 Javascript
vue基础之事件v-onclick="函数"用法示例
Mar 11 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
Nov 25 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
Mar 25 Javascript
js实现星星打分效果
Jul 05 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
Jan 30 #Javascript
微信小程序数据存储与取值详解
Jan 30 #Javascript
Vue精简版风格概述
Jan 30 #Javascript
vue自定义全局组件(自定义插件)的用法
Jan 30 #Javascript
vue2.0之多页面的开发的示例
Jan 30 #Javascript
vue-cli实现多页面多路由的示例代码
Jan 30 #Javascript
jQuery与vue实现拖动验证码功能
Jan 30 #jQuery
You might like
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
Phpbean路由转发的php代码
2008/01/10 PHP
PHP 文件上传源码分析(RFC1867)
2009/10/30 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
PHP实现读取一个1G的文件大小
2013/08/24 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
JS导出PDF插件的方法(支持中文、图片使用路径)
2016/07/12 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
python getpass实现密文实例详解
2019/09/24 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
2019/12/12 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
毕业生的自我评价分享
2013/12/18 职场文书
车间组长岗位职责
2013/12/20 职场文书
中学生个人自我评价
2014/02/06 职场文书
普通话演讲稿
2014/09/03 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书