Vue 401配合Vuex防止多次弹框的案例


Posted in Javascript onNovember 11, 2020

1.安装Vuex

npm install vuex --save

2. 新建store目录结构

Vue 401配合Vuex防止多次弹框的案例

3. 编辑store.js

import Vuex from 'vuex'
import Vue from 'vue'
import defaultState from './state/state'
import mutations from './mutations/mutations'
import getters from './getters/getters'
import actions from './actions/actions'
 
Vue.use(Vuex)
 
// 开发环境
const isDev = process.env.NODE_ENV === 'development'
 
export default new Vuex.Store({
 strict: isDev, // 开发环境中使用严格模式,防止给Vuex的状态对象直接赋值
 state: defaultState,
 mutations,
 getters,
 actions
})

4. 编辑state.js

export default {
 tokenStatus: true, // token状态
}

5. 编辑mutations.js

export default {
 updateTokenStatus (state, bool) {
  state.tokenStatus = bool
 }
}

PS: getters用于计算属性,actions用于异步操作(暂无使用)

6. 挂载到vue根目录下,编辑main.js

import store from './store/store'
 
new Vue({
 store,
 router,
 render: h => h(App)
}).$mount('#app')

7. login 登录时,改变state.tokenStatus的值

import { mapMutations } from 'vuex' 
methods: {
  // 声明Vuex的mutations的方法
  ...mapMutations(['updateTokenStatus']),
  // 登录方法
  login () {
    ......
    // 改变Vuex.state.tokenStatus的值
    this.updateTokenStatus(true)
  }
}

8. 配置axios的错误判断

// 初始化用户信息
  initUserInfo () {
   const p1 = this.$api.user.getUserInfo()
   p1.then(result => {
    this.data = result
    this.isEdit = false
    this.firstLoading = false
   }).catch(reason => {
    this.firstLoading = false
    this.isEdit = false
    // 目前后端是通过code为-1,返回错误信息
    if (parseInt(reason.code) === -1) {
     this.$alert(reason.message, '提示', { type: 'error' })
    }
   })
  },

9. 拦截响应, 处理401,返回自定义错误

import router from '../../router'
import axios from 'axios'
import localStorage from 'localStorage'
import { MessageBox } from 'element-ui'
import store from '../../store/store'
 
// http response 拦截器
axios.interceptors.response.use(
 response => {
  return response
 },
 error => {
  if (error.response) {
   if (error.response.status === 401) {
    switch (error.response.status) {
     case 401:
      const route = localStorage.getItem('vip_entrance')
      router.replace({
       path: route,
       query: { redirect: router.currentRoute.fullPath }
      })
      if (store.state.tokenStatus) {
       // 饿了么框架弹框
       MessageBox.alert('登录超时!', '提示', { type: 'error' })
       // 修改tokenStatus状态,防止多次点击
       store.commit('updateTokenStatus', false)
      }
      const data = {
       code: 1
      }
      return Promise.reject(data)
    }
   }
  }
  return Promise.reject(error.response.data)
 }
)

补充知识:vue 配置vuex在严格模式下出现是问题

我就废话不多说了,大家还是直接看代码吧~

需要关闭严格模式,不然会报错

import Vue from "vue";
import Vuex from "vuex";
import createPersistedState from "vuex-persistedstate";
import * as Cookies from "js-cookie";
import user from "./modules/user";
import myCen from "./modules/myCen";
import registered from "./modules/registered";
Vue.use(Vuex);

export default new Vuex.Store({
 strict: false, //关闭严格模式
 modules: {
  user,
  myCen,
  registered
 },
 // 持久化储存
 plugins: [ 
  createPersistedState({
   storage: {
    getItem: key => Cookies.get(key),
    setItem: (key, value) => Cookies.set(key, value, { expires: 7 }),
    removeItem: key => Cookies.remove(key)
   }
  })
 ]
});

以上这篇Vue 401配合Vuex防止多次弹框的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 内置对象属性及方法集合
Jul 04 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
Feb 03 Javascript
JS获取键盘上任意按键的值(实例代码)
Nov 12 Javascript
jQuery写fadeTo示例代码
Feb 21 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
Aug 06 Javascript
jQuery实现图片渐入渐出切换展示效果
Aug 15 Javascript
轻松理解JavaScript闭包
Mar 14 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
Apr 25 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
Apr 17 Javascript
Element 默认勾选表格 toggleRowSelection的实现
Sep 04 Javascript
layui table 列宽百分比显示的实现方法
Sep 28 Javascript
react合成事件与原生事件的相关理解
May 13 Javascript
VUE-ElementUI 自定义Loading图操作
Nov 11 #Javascript
在elementui中Notification组件添加点击事件实例
Nov 11 #Javascript
vue.js+element 默认提示中英文操作
Nov 11 #Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
Nov 11 #Javascript
vue 实现element-ui中的加载中状态
Nov 11 #Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
Nov 11 #Javascript
JS前端基于canvas给图片添加水印
Nov 11 #Javascript
You might like
php 字符串替换的方法
2012/01/10 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
js调用flash的效果代码
2008/04/26 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
nodejs中的fiber(纤程)库详解
2015/03/24 NodeJs
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
初探nodeJS
2017/01/24 NodeJs
微信小程序实现移动端滑动分页效果(ajax)
2017/06/13 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
vue 权限认证token的实现方法
2018/07/17 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
python利用微信公众号实现报警功能
2018/06/10 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
西安众合通用.net笔试题
2013/03/18 面试题
医学院护理专业应届生求职信
2013/11/12 职场文书
销售找工作求职信
2013/12/20 职场文书
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
投标授权委托书范文
2014/08/02 职场文书
车辆转让协议书
2014/09/24 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
2014司机年终工作总结
2014/12/05 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
java版 简单三子棋游戏
2022/05/04 Java/Android