一个页面如果有多个请求,最好不要用全局loading。

【有的人居然会提出要封装全局loading,我也是服了】

关键代码如下

完整代码如下。

说明:请求拦截中,config中的loadingHide和loadingText都是请求实例传过来的参数

import axios from 'axios'
import Cookies from 'js-cookie'
import router from '@/router'
import qs from 'qs'
import { clearLoginInfo } from '@/utils'
import isPlainObject from 'lodash/isPlainObject'
import {Loading
} from 'element-ui';const http = axios.create({baseURL: window.SITE_CONFIG['apiURL'],timeout: 1000 * 180,withCredentials: true
})/*** 模拟一个出入栈*/
let loadingInstance = null; // 记录页面中存在的loading
let loadingCount = 0; // 记录当前正在请求的数量function showLoading(data) {if (loadingCount === 0) {loadingInstance = Loading.service({lock: true,text: data || '加载中……'});}loadingCount++
};function hideLoading() {loadingCount--if (loadingInstance && loadingCount === 0) {loadingInstance.close()loadingInstance = null}
}/*** 请求拦截*/
http.interceptors.request.use(config => {if (!config.loadingHide) {//有的请求隐藏loadingshowLoading(config.loadingText)}config.headers['Accept-Language'] = Cookies.get('language') || 'zh-CN'config.headers['token'] = Cookies.get('token') || ''// 默认参数var defaults = {}// 防止缓存,GET请求默认带_t参数if (config.method === 'get') {config.params = {...config.params,...{ '_t': new Date().getTime() }}}if (isPlainObject(config.params)) {config.params = {...defaults,...config.params}}if (isPlainObject(config.data)) {config.data = {...defaults,...config.data}if (/^application\/x-www-form-urlencoded/.test(config.headers['content-type'])) {config.data = qs.stringify(config.data)}}return config
}, error => {return Promise.reject(error)
})/*** 响应拦截*/
http.interceptors.response.use(response => {if (!response.config.loadingHide) {//有的请求需要隐藏loadinghideLoading()}if (response.data.code === 401 || response.data.code === 10001) {clearLoginInfo()router.replace({ name: 'login' })return Promise.reject(response.data.msg)}return response
}, error => {if (!error.config.loadingHide) {//有的请求需要隐藏loadinghideLoading()}console.error(error)return Promise.reject(error)
})export default {get: (path, data, config) =>instance.get(path, {params: data,...config}),post: (path, data, config) => instance.post(path, data, config),put: (path, data, config) => instance.put(path, data, config),delete: (path, data, config) =>instance.delete(path, {data,...config})
}

axios封装全局loading相关推荐

  1. 同时多个axios请求_用 React+Antd 封装 Axios 实现全局 Loading 效果

    前言 今天在做 react 后台管理的时候要实现一个全局 Loading 效果,通常使用 axios 库与后端进行数据交互.为了更好的用户体验,在每次请求前添加一个加载效果,让用户知道在等待加载. 要 ...

  2. axios post body参数_Vue开发中的一些问题(axios封装)

    关于Vue开发的问题(axios封装) 在博客中查找vue的axios封装,发现其中案例还是很多的,自己项目中有些需求不够. 比如 1.Content-Type 请求头 application/x-w ...

  3. vite + vue3 + 封装axios + 封装loading + 封装返回顶部

    前言 ​前期回顾    ​ vite + vue3 + ts配置<企业级项目>二次封装el-table.分页_0.活在风浪里的博客-CSDN博客封装的功能有哪些?分页.表格排序.文字居中. ...

  4. axios中并发、继发请求的全局loading设置

    前言 项目中,全局loading一般是在整体内容区域进行展示,项目在调用接口的时候展示,接口调用完成后隐藏,防止在页面接口请求过程中用户进行意料之外的操作.这次就是对loading的一个处理过程 项目 ...

  5. axios vue 加载效果动画_vue+axios+element ui 实现全局loading加载示例

    实现全局loading加载 分析需求,我们只需要在请求发起的时候开始loading,响应结束的时候关闭loading,就这么简单 对不对? import axios from 'axios'; imp ...

  6. vue中axios封装请求

    执行 GET 请求 // 向具有指定ID的用户发出请求 axios.get('/user?ID=12345') .then(function (res) {console.log(res); }) . ...

  7. 在vue项目中使用axios封装axios

    基本使用 安装 // 项目中安装 npm install axios --S // cdn 引入 <script src="https://unpkg.com/axios/dist/a ...

  8. axios封装,api接口封装统一管理

    axios封装,api接口封装统一管理 一. axios说明 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. axios的封装和api接口的统一管理, ...

  9. vue-cli4+vant+rem+sass+vuex+axios封装+webpack搭建移动端项目

    h5移动端项目模板 基于 vue-cli4.0 + webpack 4 + vant ui + sass+ rem 适配方案+axios 封装,构建手机端模板脚手架 启动项目 git clone ht ...

  10. vue axios封装以及登录token过期跳转问题

    Axios配置JWT/封装插件/发送表单数据 首先请务必已仔细阅读 Axios 文档并熟悉 JWT: 中文文档 JWT 中文文档 安装 npm install axios npm install es ...

最新文章

  1. 张槎地铁站定位综合枢纽 与多条重要轨道交汇
  2. 【opencv】15.H265Decoder解码h265为cv::Mat完整代码
  3. 实战react技术栈+express前后端博客项目(8)-- 前端管理界面标签管理+后端对应接口开发...
  4. google套件_Google 推出 3 款语音识别应用,想用 AI 帮语言障碍者说话
  5. linux各机器之间配置无密码访问
  6. Gradle学习目录
  7. 算法导论课后习题解析 第四章 下
  8. A5.2021年全国数学建模竞赛B题-赛题分析与评阅要点(乙醇偶合制备C4烯烃分析)
  9. iQOO 5今日发布:厚度/重量揭晓 5G手机也能够轻薄
  10. 用docker swarm 实现集群
  11. 为什么Byte类型的运算结果要用int类型来接收
  12. lol手游账号被移至美洲服务器,LOL手游“行窃预兆”遭玩家嫌弃,移除偷钱后成最鸡肋符文?...
  13. MySQL 5.6内存占用过高解决方案
  14. StackOverflow热帖:Java整数相加溢出怎么办?Java8一步搞定~
  15. 别再找Axure XX版,这款原型工具永久免费!
  16. 罗技dpi计算机配置文件,罗技游戏鼠标的配置文件修改方法 Logitech 游戏软件为游戏鼠标的配置文件设置不同的 DPI...
  17. 通用技术 支付笔记之 PayPal 支付原理
  18. Cadence之双击(DSN/brd)文件打开变新建文件的解决方法
  19. Android 找不到符号错误
  20. 【解决】敬业签Windows电脑桌面便签软件安装不能打开要写入的文件问题造成桌面便签软件安装失败的解决办法

热门文章

  1. 软件项目运维内容 软件系统运维工作内容
  2. 全国宏观经济指标(图表以及相应的大致注释)
  3. 苹果手机突然没信号无服务器,iPhone突然没信号?3个方法让你迅速解决断线问题!...
  4. APS生产计划排程(Production Planning and Scheduling)
  5. 前端三级联动 distpicker插件
  6. 【SLAM小车】硬件_TB6612FNG设计记录
  7. idea urule不存在
  8. VMware下载以及安装教程
  9. Linux系统查看内存使用情况
  10. 实现了一个跨平台的 YUV 文件图片查看器