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系列(47):对象创建模式(上篇)
Mar 04 Javascript
教你用javascript实现随机标签云效果_附代码
Mar 16 Javascript
jquery获取img的src值的简单实例
May 17 Javascript
深入浅析JavaScript中的3DES
Aug 24 Javascript
阿里云ecs服务器中安装部署node.js的步骤
Oct 08 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
Oct 27 Javascript
vue.js学习笔记之绑定style样式和class列表
Oct 31 Javascript
使用bootstrap插件实现模态框效果
May 10 Javascript
Vue开发之封装上传文件组件与用法示例
Apr 25 Javascript
怎么使用javascript深度拷贝一个数组
Jun 06 Javascript
js针对图片加载失败的处理方法分析
Aug 24 Javascript
Nautil 中使用双向数据绑定的实现
Oct 02 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+xml实现在线英文词典查询的方法
2015/01/23 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
vue模板语法-插值详解
2017/03/06 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
深入理解NumPy简明教程---数组2
2016/12/17 Python
Python的标准模块包json详解
2017/03/13 Python
Python利用ElementTree模块处理XML的方法详解
2017/08/31 Python
python 创建一维的0向量实例
2019/12/02 Python
Python sys模块常用方法解析
2020/02/20 Python
Python实现分数序列求和
2020/02/25 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
戴森英国官网:Dyson英国
2019/05/07 全球购物
PHP如何删除一个Cookie值
2012/11/15 面试题
建材业务员岗位职责
2013/12/08 职场文书
个人素质的自我评价分享
2013/12/16 职场文书
办理生育手续介绍信
2014/01/14 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
长城的导游词
2015/01/30 职场文书