详解刷新页面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 代码优化点滴记录
Feb 19 Javascript
原生js结合html5制作小飞龙的简易跳球
Mar 30 Javascript
基于jQuery实现放大镜特效
Oct 19 Javascript
javascript类型系统 Window对象学习笔记
Jan 07 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
May 28 Javascript
浅谈AngularJs指令之scope属性详解
Oct 24 Javascript
利用JQuery实现datatables插件的增加和删除行功能
Jan 06 Javascript
jQuery实现下拉菜单的实例代码
Jun 19 jQuery
基于js中的原型(全面讲解)
Sep 19 Javascript
jQuery获取随机颜色的实例代码
May 21 jQuery
element vue Array数组和Map对象的添加与删除操作
Nov 14 Javascript
环形加载进度条封装(Vue插件版和原生js版)
Dec 04 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
php实现XSS安全过滤的方法
2015/07/29 PHP
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
JS作用域深度解析
2016/12/29 Javascript
React Router基础使用
2017/01/17 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
Python 简单计算要求形状面积的实例
2020/01/18 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
学期自我鉴定范文
2013/10/01 职场文书
创业计划书撰写原则
2014/01/25 职场文书
优秀本科生求职推荐信
2014/02/24 职场文书
保护环境建议书400字
2014/05/13 职场文书
暑假生活随笔
2015/08/15 职场文书
Python使用openpyxl批量处理数据
2021/06/23 Python
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android
nginx内存池源码解析
2021/11/20 Servers