详解刷新页面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 相关文章推荐
图片上传判断及预览脚本的效果实例
Aug 07 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
Nov 18 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
Nov 17 Javascript
微信小程序 wxapp导航 navigator详解
Oct 31 Javascript
详解微信小程序设置底部导航栏目方法
Jun 29 Javascript
Vue动态组件实例解析
Aug 20 Javascript
ES6扩展运算符的用途实例详解
Aug 20 Javascript
Vue 换肤的示例实践
Jan 23 Javascript
MVVM框架下实现分页功能示例
Jun 14 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
May 16 Javascript
JavaScript仿京东秒杀倒计时
Mar 17 Javascript
仿照Element-ui实现一个简易的$message方法
Sep 14 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
Content-type 的说明
2006/10/09 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
php读取文件内容的方法汇总
2015/01/24 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
jquery构造器的实现代码小结
2011/05/16 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
关于Django Models CharField 参数说明
2020/03/31 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
室内设计实习自我鉴定
2013/09/25 职场文书
社保转移委托书范本
2014/10/08 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
党员转正申请报告
2015/05/15 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python