This article mainly introduces the method of using Axios Element to implement global request loading. Now I share it with you and give it as a reference.
Background
The business requirement is like this. Whenever a request is sent to the backend, a full-screen loading is triggered, and multiple requests are merged into one loading.
The current project uses vue, axios, element, etc., so the article mainly talks about how to use axios and element to implement this function.
The effect is as follows:
Analysis
First, load starts when the request starts, and then End loading after the request returns. The point is to intercept requests and responses.
Then, multiple requests must be merged into one loading.
Finally, call the loading component of element.
Intercepting requests and responses
The basic usage of axios will not be described in detail. The author uses axios in the project by creating instances.
// 创建axios实例 const $ = axios.create({ baseURL: `${URL_PREFIX}`, timeout: 15000 })
Then encapsulate the post request (take post as an example)
export default { post: (url, data, config = { showLoading: true }) => $.post(url, data, config) }
axios Provides interfaces for request interception and response interception. The showFullScreenLoading method will be called for each request, and the tryHideFullScreenLoading() method will be called for each response.
// 请求拦截器 $.interceptors.request.use((config) => { showFullScreenLoading() return config }, (error) => { return Promise.reject(error) }) // 响应拦截器 $.interceptors.response.use((response) => { tryHideFullScreenLoading() return response }, (error) => { return Promise.reject(error) })
Then showFullScreenLoading tryHideFullScreenLoading( ) to do is to merge requests at the same time. Declare a variable needLoadingRequestCount, and call the showFullScreenLoading method needLoadingRequestCount 1 each time. Call tryHideFullScreenLoading() method, needLoadingRequestCount - 1. When needLoadingRequestCount is 0, loading ends.
let needLoadingRequestCount = 0 export function showFullScreenLoading() { if (needLoadingRequestCount === 0) { startLoading() } needLoadingRequestCount++ } export function tryHideFullScreenLoading() { if (needLoadingRequestCount <= 0) return needLoadingRequestCount-- if (needLoadingRequestCount === 0) { endLoading() } }
startLoading() and endLoading() are to call the loading method of element.
import { Loading } from 'element-ui' let loading function startLoading() { loading = Loading.service({ lock: true, text: '加载中……', background: 'rgba(0, 0, 0, 0.7)' }) } function endLoading() { loading.close() }
At this point, the basic functions have been implemented. Every time a post request is sent, a full-screen loading will be displayed. Multiple requests at the same time are combined into one loading, and loading ends after all responses are returned.
Function enhancement
In fact, the current function is still a little bit worse. If a certain request does not require loading, then just add the showLoading: false parameter when sending the request. During request interception and response interception, determine whether the request requires loading. If loading is required, call the showFullScreenLoading() method.
When encapsulating the post request, the config object has been added to the third parameter. config includes showloading. Then handle them separately in the interceptor.
// 请求拦截器 $.interceptors.request.use((config) => { if (config.showLoading) { showFullScreenLoading() } return config }) // 响应拦截器 $.interceptors.response.use((response) => { if (response.config.showLoading) { tryHideFullScreenLoading() } return response })
When we call axios, we put config in the third parameter. Axios will directly put showloading in the callback parameter of the request interceptor. You can Use directly. There is a config key in the callback parameter response in the response interceptor. This config is the same as the callback parameter config of the request interceptor.
The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.
Related articles:
Detailed explanation of Vue’s global introduction of bass.scss solution
js builds a binary tree to remove numerical arrays Detailed explanation of emphasis and optimization
Detailed explanation of red-black tree insertion and Javascript implementation method example
The above is the detailed content of Using Axios Element to implement global request loading method. For more information, please follow other related articles on the PHP Chinese website!