详解刷新页面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中的事件
Sep 23 Javascript
jquery nth-child()选择器的简单应用
Jul 10 Javascript
再谈querySelector和querySelectorAll的区别与联系
Apr 20 Javascript
jQuery.Validate验证库的使用介绍
Apr 26 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
Jun 24 Javascript
js实现图片拖动改变顺序附图
May 13 Javascript
jQuery()方法的第二个参数详解
Apr 29 Javascript
js实现页面跳转的几种方法小结
May 16 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
Aug 10 Javascript
JavaScript中子对象访问父对象的方式详解
Sep 01 Javascript
利用three.js画一个3D立体的正方体示例代码
Nov 19 Javascript
深入理解vue中slot与slot-scope的具体使用
Jan 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实现高效获取图片尺寸的方法
2014/12/12 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
关于PHP文件的自动运行方法分析
2016/05/13 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
在Python中使用__slots__方法的详细教程
2015/04/28 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
python中pop()函数的语法与实例
2020/12/01 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
屈臣氏菲律宾官网:Watsons菲律宾
2020/06/30 全球购物
班班通项目实施方案
2014/02/25 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA