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 相关文章推荐
根据邮箱的域名跳转到相应的登录页面的代码
Feb 27 Javascript
JQuery each()函数如何优化循环DOM结构的性能
Dec 10 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
May 14 Javascript
用Jquery实现滚动新闻
Feb 12 Javascript
jquery获取复选框被选中的值
Apr 10 Javascript
AngularJS中的模块详解
Jan 29 Javascript
使用 bootstrap modal遇到的问题小结
Nov 09 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
Dec 30 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
May 14 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
Nov 07 Javascript
用vue写一个日历
Nov 02 Javascript
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
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中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
详解vue中组件参数
2018/07/09 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
python中执行shell命令的几个方法小结
2014/09/18 Python
在ironpython中利用装饰器执行SQL操作的例子
2015/05/02 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
三年级语文教学反思
2014/02/01 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
教师党员公开承诺事项
2014/05/28 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
公务员年度个人总结
2015/02/12 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
2015年调度员工作总结
2015/04/30 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS