• 项目实用功能-全局loading动画


    1.为设么要使用全局loading

    调用的每一个接口都要绑定一个loading真的很烦。

    2.实现这个需要考虑哪些要素

    • 首先全局的loading需要一个调用任何接口都要执行的地方打开,那就肯定是axios的前置拦截函数了。
    • loading有加载整个页面的,也有加载部分页面的(下拉框内容展示区等),所以不是所有接口都能使用全局loading,这就需要使用一个白名单,只对白名单内存在的接口进行处理
    • 关闭loading,那就肯定是axios的后置拦截函数了。
    • 当同时请求多个接口,如何判断所有接口请求完成后关闭loading。用一个数组存储请求的接口路径,axios后置拦截函数中删除数组中返回状态的接口,数组长度=0,关闭loading即可。

    3.实现

    let apiList = [];  // 存储请求的接口
    api.interceptors.request.use(
        request => {
            let {interfaceLoading,whiteList} = store.state.global
            // 启动全局loding
            if(whiteList.indexOf(request.url) > -1 && !interfaceLoading){
                store.commit('global/setInterfaceLoading',true)
                // 记录请求接口,用于判断何时取消loading
                apiList.push(request.url)
            }
            return request
        }
    )
    
    api.interceptors.response.use(
        response => {
            // 清除请求地址,清空则取消loading
            let index = apiList.findIndex((item)=>item===response.config.url)
            if(index!==-1){
                apiList.splice(index,1)
            }
            if(apiList.length===0){
                store.commit('global/setInterfaceLoading',false)
            }
            // 以下为处理返回数据结果
            if (response.data) {
                if (response.data.status === 200) {
                    return Promise.resolve(response.data)
                }
                else if (response.data.errorType) {
                    // alert.typeOne('error',response.data.msg)
                    return Promise.resolve(response.data)
                } else {
                    // 请求成功并且没有报错
                    return Promise.resolve(response.data)
                }
            } else {
                toLogin()
            }
        }
  • 相关阅读:
    Spark系列之Spark概述
    STM32-看门狗
    JavaWeb基础(一)——web应用程序的基本概念
    QT调用百度地图并返回点击地的经纬度
    Ajax——Ajax基于JSON和XML的数据交换格式以及乱码解决
    Spring Boot整合OAuth2实现GitHub第三方登录
    三道MySQL联合索引面试题,淘汰80%的面试者,你能答对几道
    Rabin-Karp 字符串哈希算法总结
    PPT简明
    [RK-Linux] recovery分区详解(一)
  • 原文地址:https://blog.csdn.net/m0_57479235/article/details/127091182