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分秒倒计时器实现方法
Feb 02 Javascript
JS实现判断碰撞的方法
Feb 11 Javascript
JavaScript中的Math.LOG2E属性使用详解
Jun 14 Javascript
深入浅析Bootstrap列表组组件
May 03 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
May 30 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
Apr 25 Javascript
Vue2.0生命周期的理解
Aug 20 Javascript
vue生命周期与钩子函数简单示例
Mar 13 Javascript
vue+高德地图写地图选址组件的方法
May 18 Javascript
JS实现打砖块游戏
Feb 14 Javascript
js cavans实现静态滚动弹幕
May 21 Javascript
微信小程序实现音乐播放页面布局
Dec 11 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
WHOIS类的修改版
2006/10/09 PHP
用PHP生成静态HTML速度快类库
2007/03/18 PHP
php 无限极分类
2008/03/27 PHP
PHP使用递归生成文章树
2015/04/21 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
Python的迭代器和生成器使用实例
2015/01/14 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
2017/07/13 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
django做form表单的数据验证过程详解
2019/07/26 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
Stührling手表官方网站:男女高品质时尚手表的领先零售商
2021/01/07 全球购物
条幅标语大全
2014/06/20 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
投资合作意向书范本
2015/05/08 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
2015年秋季校长开学典礼致辞
2015/07/29 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
在redisCluster中模糊获取key方式
2021/07/09 Redis