详解刷新页面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 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
Jun 29 Javascript
Js 时间间隔计算的函数(间隔天数)
Nov 15 Javascript
Jquery 的outerHeight方法使用介绍
Sep 11 Javascript
js中window.open打开一个新的页面
Aug 10 Javascript
更快的异步执行(setTimeout多浏览器)
Aug 12 Javascript
Angularjs 实现分页功能及示例代码
Sep 14 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
Oct 28 Javascript
JS实现两周内自动登录功能
Mar 23 Javascript
Node.js使用Express创建Web项目详细教程
Mar 31 Javascript
Vue异步组件使用详解
Apr 08 Javascript
手动下载Chrome并解决puppeteer无法使用问题
Nov 12 Javascript
vue 页面回退mounted函数不执行的解决方案
Jul 26 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实现图象锐化代码
2007/06/14 PHP
php的sso单点登录实现方法
2015/01/08 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
javascript在一段文字中的光标处插入其他文字
2007/08/26 Javascript
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
python写一个随机点名软件的实例
2019/11/28 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
深入剖析HTML5 内联框架iFrame
2016/05/04 HTML / CSS
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
自我鉴定四大框架
2014/01/17 职场文书
硕士生工作推荐信
2014/03/07 职场文书
社保委托书怎么写
2014/08/02 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
2014年终个人总结报告
2015/03/09 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
Python使用Kubernetes API访问集群
2021/05/30 Python
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android