100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 用Axios Element实现全局的请求loading办法

用Axios Element实现全局的请求loading办法

时间:2019-09-09 19:56:03

相关推荐

用Axios Element实现全局的请求loading办法

web前端|js教程

Element,Axios,请求

web前端-js教程

本篇文章主要介绍了用Axios Element实现全局的请求loading的方法,现在分享给大家,也给大家做个参考。

退款钓鱼源码,vscode不显示,ubuntu初始页面如何重启,tomcat安全吗,sqlite更新多个值,wordpress 评论验证码 插件,前端框架眼镜拍照推荐,体型较大黑色蚂蚁爬虫,php 163,网站注重SEO,米表网站程序,网页字体编辑代码,留言宝 模板,delphi 控制外部程序按钮lzw

背景

php入门到精通源码,vscode无法设置成中文,ubuntu 连接 拒绝,tomcat进程莫名消失,宿州爬虫店,js和php哪个难,昆明seo优化推广多少钱lzw

业务需求是这样子的,每当发请求到后端时就触发一个全屏的 loading,多个请求合并为一次 loading。

汇编扫雷小游戏源码,怎么导出vscode压缩包,ubuntu 打开dos,怎么将tomcat安装,python爬虫天下,php官方文档下载,高新区seo优化费用lzw

现在项目中用的是 vue 、axios、element等,所以文章主要是讲如果使用 axios 和 element 实现这个功能。

效果如下:

分析

首先,请求开始的时候开始 loading, 然后在请求返回后结束 loading。重点就是要拦截请求和响应。

然后,要解决多个请求合并为一次 loading。

最后,调用element 的 loading 组件即可。

拦截请求和响应

axios 的基本使用方法不赘述。笔者在项目中使用 axios 是以创建实例的方式。

// 创建axios实例const $ = axios.create({ baseURL: `${URL_PREFIX}`, timeout: 15000})

然后再封装 post 请求(以 post 为例)

export default { post: (url, data, config = { showLoading: true }) => $.post(url, data, config)}

axios 提供了请求拦截和响应拦截的接口,每次请求都会调用showFullScreenLoading方法,每次响应都会调用tryHideFullScreenLoading()方法

// 请求拦截器$.interceptors.request.use((config) => { showFullScreenLoading() return config}, (error) => { return Promise.reject(error)})// 响应拦截器$.interceptors.response.use((response) => { tryHideFullScreenLoading() return response}, (error) => { return Promise.reject(error)})

那么showFullScreenLoading tryHideFullScreenLoading()要干的事儿就是将同一时刻的请求合并。声明一个变量needLoadingRequestCount,每次调用showFullScreenLoading方法 needLoadingRequestCount + 1。调用tryHideFullScreenLoading()方法,needLoadingRequestCount – 1。needLoadingRequestCount为 0 时,结束 loading。

let needLoadingRequestCount = 0export function showFullScreenLoading() { if (needLoadingRequestCount === 0) { startLoading() } needLoadingRequestCount++}export function tryHideFullScreenLoading() { if (needLoadingRequestCount <= 0) return needLoadingRequestCount-- if (needLoadingRequestCount === 0) { endLoading() }}

startLoading()和endLoading()就是调用 element 的 loading 方法。

import { Loading } from element-uilet loadingfunction startLoading() { loading = Loading.service({ lock: true, text: 加载中……, background: gba(0, 0, 0, 0.7) })}function endLoading() { loading.close()}

到这里,基本功能已经实现了。每发一个 post 请求,都会显示全屏 loading。同一时刻的多个请求合并为一次 loading,在所有响应都返回后,结束 loading。

功能增强

实际上,现在的功能还差一点。如果某个请求不需要 loading 呢,那么发请求的时候加个 showLoading: false的参数就好了。在请求拦截和响应拦截时判断下该请求是否需要loading,需要 loading 再去调用showFullScreenLoading()方法即可。

在封装 post 请求时,已经在第三个参数加了 config 对象。config 里包含了 showloading。然后在拦截器中分别处理。

// 请求拦截器$.interceptors.request.use((config) => { if (config.showLoading) { showFullScreenLoading() } return config})// 响应拦截器$.interceptors.response.use((response) => { if (response.config.showLoading) { tryHideFullScreenLoading() } return response})

我们在调用 axios 时把 config 放在第三个参数中,axios 会直接把 showloading 放在请求拦截器的回调参数里,可以直接使用。在响应拦截器中的回调参数 response 中则是有一个 config 的 key。这个 config 则是和请求拦截器的回调参数 config 一样。

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

详解Vue 全局引入bass.scss 处理方案

js构建二叉树进行数值数组的去重与优化详解

红黑树的插入详解及Javascript实现方法示例

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。