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据option的value值快速设定初始的selected选项
Aug 13 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
Jan 24 Javascript
javascript四舍五入函数代码分享(保留后几位)
Dec 10 Javascript
javascript实现playfair和hill密码算法
Dec 07 Javascript
JavaScript中的Repaint和Reflow用法详解
Jul 27 Javascript
JavaScript弹窗基础篇
Apr 27 Javascript
fullpage.js全屏滚动插件使用实例
Sep 06 Javascript
javascript基础练习之翻转字符串与回文
Feb 20 Javascript
vue父组件通过props如何向子组件传递方法详解
Aug 16 Javascript
如何实现一个webpack模块解析器
Oct 24 Javascript
vue 对axios get pust put delete封装的实例代码
Jan 05 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
Apr 28 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加入ftp扩展的解决方法
2013/02/07 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
javascript比较文档位置
2008/04/08 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
JavaScript模拟实现继承的方法
2015/03/30 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
Vue侦测相关api的实现方法
2019/05/22 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
python 数据加密代码
2008/12/24 Python
jupyter安装小结
2016/03/13 Python
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
python 读取二进制 显示图片案例
2020/04/24 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
新驾驶员个人自我评价
2014/01/03 职场文书
庆八一活动方案
2014/01/25 职场文书
小学生评语集锦
2014/04/18 职场文书
供货协议书范本
2014/04/22 职场文书
党建工作先进材料
2014/05/02 职场文书
高三励志标语
2014/06/05 职场文书
社区敬老月活动总结
2015/05/07 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书
python - timeit 时间模块
2021/04/06 Python
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android