详解刷新页面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 相关文章推荐
怎么清空javascript数组
May 11 Javascript
jquery设置按钮停顿3秒不可用
Mar 07 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
Sep 04 Javascript
Javascript中的匿名函数与封装介绍
Mar 15 Javascript
Bootstrap基本样式学习笔记之按钮(4)
Dec 07 Javascript
JS实现的简单图片切换功能示例【测试可用】
Feb 14 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
Feb 14 Javascript
jQuery EasyUI ProgressBar进度条组件
Feb 28 Javascript
node.js使用redis储存session的方法
Sep 26 Javascript
一秒学会微信小程序制作table表格
Feb 14 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
May 09 Javascript
JavaScript最完整的深浅拷贝实现方式详解
Feb 28 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
全国中波电台频率表
2020/03/11 无线电
PHP简单系统查询模块代码打包下载
2008/06/07 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
JavaScript类型相关的常用操作总结
2019/02/14 Javascript
解决element ui select下拉框不回显数据问题的解决
2019/02/20 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
vue中使用腾讯云Im的示例
2020/10/23 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
[57:55]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第二场 12.12
2020/12/16 DOTA
动态创建类实例代码
2009/10/07 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
keras中的History对象用法
2020/06/19 Python
python 下载文件的多种方法汇总
2020/11/17 Python
python中实现词云图的示例
2020/12/19 Python
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
计算机应用应届生求职信
2014/07/12 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
《窃读记》教学反思
2016/02/18 职场文书
导游词之台湾阿里山
2019/10/23 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python