详解刷新页面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 相关文章推荐
表单提交验证类
Jul 14 Javascript
YUI 读码日记之 YAHOO.lang.is*
Mar 22 Javascript
javascript 动态生成私有变量访问器
Dec 06 Javascript
jQuery解决iframe高度自适应代码
Dec 20 Javascript
两个JavaScript jsFiddle JSBin在线调试器
Mar 14 Javascript
jquery特效 幻灯片效果示例代码
Jul 16 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
Dec 13 Javascript
jQuery AjaxUpload 上传图片代码
Feb 02 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
Jul 10 Javascript
浅析vue-router中params和query的区别
Dec 24 Javascript
将Vue组件库更换为按需加载的方法步骤
May 06 Javascript
JS轻量级函数式编程实现XDM二
Jun 16 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绘制一个矩形的方法
2015/01/24 PHP
accesskey 提交
2006/06/26 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
微信小程序progress组件使用详解
2018/01/31 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
用Python编程实现语音控制电脑
2014/04/01 Python
python生成器generator用法实例分析
2015/06/04 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
python django中8000端口被占用的解决
2019/12/17 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
医科大学毕业生自荐信
2014/02/03 职场文书
高三毕业评语
2014/12/31 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
部门主管竞聘书
2015/09/15 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
2016年小学“公民道德宣传日”活动总结
2016/04/01 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
Mysql基础知识点汇总
2021/05/26 MySQL
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫