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 相关文章推荐
学习jquery必备 api中英文对照的chm手册 下载
May 03 Javascript
利用WebBrowser彻底解决Web打印问题(包括后台打印)
Jun 22 Javascript
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
Oct 29 Javascript
url参数中有+、空格、=、%、&、#等特殊符号的问题解决
May 15 Javascript
javascript单引号和双引号的区别和处理
May 14 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
Jun 15 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
Jan 04 Javascript
js 创建对象 经典模式全面了解
Aug 16 Javascript
对Angular中单向数据流的深入理解
Mar 31 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
Oct 12 Javascript
layer弹出层倒计时关闭的实现方法
Sep 27 Javascript
如何实现iframe父子传参通信
Feb 05 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
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
php中神奇的fastcgi_finish_request
2011/05/02 PHP
php实现图片缩放功能类
2013/12/18 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
JavaScript实现通讯录功能
2020/12/27 Javascript
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
使用Pycharm分段执行代码
2020/04/15 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
python 安装移动复制第三方库操作
2020/07/13 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
python中re模块知识点总结
2021/01/17 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
英国赛车、汽车改装和摩托车零件购物网站:Demon Tweeks
2018/10/29 全球购物
入党积极分子自我鉴定
2014/02/18 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
活动简报范文
2015/07/22 职场文书
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL
MySQL深分页问题解决思路
2022/12/24 MySQL