vue + axios + element-ui 实现全局Loading(部分接口不要loading,多个请求合并一个loading)

21 篇文章 1 订阅
1 篇文章 0 订阅

vue + axios + element-ui 实现全局Loading(部分接口不要loading,多个请求合并一个loading)

  1. loading.js
import { Loading } from 'element-ui'
let needLoadingRequestCount = 0
let loading

const startLoading = () => {
  loading = Loading.service({
    lock: true,
    text: '拼命加载中...', //可以自定义文字
    spinner: 'el-icon-loading', //自定义加载图标类名
    background: 'rgba(0, 0, 0, .3)' //遮罩层背景色
  })
}
function endLoading() {
  Vue.nextTick(function() {
    // DOM 更新了
    loading.close()
  })
}
export const showLoading = () => {
  if (needLoadingRequestCount === 0) {
    startLoading()
  }
  needLoadingRequestCount++
}

export const hideLoading = () => {
  setTimeout(tryCloseLoading, 300)
}

function tryCloseLoading() {
  if (needLoadingRequestCount <= 0) return
  needLoadingRequestCount--
  if (needLoadingRequestCount === 0) {
    endLoading()
  }
}
  1. 在 封装axios请求的地方引入loading.js
import { showLoading, hideLoading } from '@/util/loading'

// 请求拦截
axios.interceptors.request.use(
  config => {  
  // 这里是加loading的地方
    if (config.config.showLoading === true) {
      showLoading()
    }
    //..... 其他代码 
  },
  error => {
    hideLoading()
    return Promise.reject(error)
  }
  )
  
// 响应拦截
axios.interceptors.response.use(
  res => {
    hideLoading()
   //..... 其他代码 
  },
  error => {
    hideLoading()
    //..... 其他代码 
  }
)

//* 封装post请求 (默认都加上loading)
export function post(url, data = {}, config = { showLoading: true }) {
  return new Promise((resolve, reject) => {
    axios({
      url,
      method: 'post',
      data,
      config
    }).then(
      response => {
        resolve(response.data)
      },
      err => {
        reject(err)
      }
    )
  })
}
  1. 当请求不想要带loading时:
    在这里插入图片描述
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值