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

简介: 项目实用功能-全局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()
        }
    }
相关文章
uniapp 全局数据(globalData)的设置,获取,更改
uniapp 全局数据(globalData)的设置,获取,更改
2322 0
|
前端开发 JavaScript API
020 Umi@4 中如何实现动态菜单
020 Umi@4 中如何实现动态菜单
1049 0
020 Umi@4 中如何实现动态菜单
|
1月前
|
存储 JavaScript UED
在 Vue 组件中动态切换全局样式
【10月更文挑战第5天】
23 1
|
2月前
|
JavaScript API
模块化妙用!用vue3实现一个鼠标追踪器和异步加载组件
该文章展示了如何使用Vue3的Composition API实现鼠标追踪器功能,并介绍了创建异步加载组件的方法,利用TS泛型增强了组件的灵活性与可维护性。
|
3月前
|
前端开发
如何在前端项目中单独引入 ElementUI 图标以及使用
这篇文章介绍了如何在前端项目中单独引入Element UI的图标文件以及如何使用这些图标。
303 0
如何在前端项目中单独引入 ElementUI 图标以及使用
|
4月前
|
JSON 小程序 数据库
【微信小程序-原生开发】实用教程14 - 列表的分页加载,触底加载更多(含无更多数据的提醒和显示,自定义组件)
【微信小程序-原生开发】实用教程14 - 列表的分页加载,触底加载更多(含无更多数据的提醒和显示,自定义组件)
121 0
|
4月前
|
小程序 JavaScript 前端开发
【微信小程序-原生开发】实用教程06-轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)
【微信小程序-原生开发】实用教程06-轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)
144 0
|
4月前
|
容器
Vite项目当中的SVG图标的配置及图标全局组件的封装
Vite项目当中的SVG图标的配置及图标全局组件的封装
115 0
|
6月前
|
移动开发 小程序 API
uniapp中uview组件库的NoticeBar 滚动通知 使用方法
uniapp中uview组件库的NoticeBar 滚动通知 使用方法
274 1
|
6月前
|
小程序
【微信小程序】-- WXSS 模板样式- 全局样式和局部样式(十四)
【微信小程序】-- WXSS 模板样式- 全局样式和局部样式(十四)