Cet article présente principalement la méthode d'utilisation d'Axios Element pour implémenter le chargement global des requêtes. Maintenant, je le partage avec vous et le donne comme référence.
Contexte
Les exigences commerciales sont les suivantes : chaque fois qu'une requête est envoyée au backend, un chargement en plein écran est déclenché et plusieurs requêtes sont fusionnées en une seule. chargement.
Vue, axios, element, etc. sont actuellement utilisés dans le projet, donc l'article parle principalement de la façon d'utiliser axios et element pour implémenter cette fonction.
L'effet est le suivant :
Analyse
Tout d'abord, le chargement démarre lorsque la requête démarre, puis termine le chargement après le retour de la demande. Le but est d’intercepter les demandes et les réponses.
Ensuite, plusieurs requêtes sont fusionnées en un seul chargement.
Enfin, appelez le composant de chargement de l'élément.
Interception des requêtes et des réponses
L'utilisation de base d'axios ne sera pas décrite en détail. L'auteur utilise axios dans le projet en créant des instances.
// 创建axios实例 const $ = axios.create({ baseURL: `${URL_PREFIX}`, timeout: 15000 })
Ensuite, encapsulez la demande de publication (prendre la publication comme exemple)
export default { post: (url, data, config = { showLoading: true }) => $.post(url, data, config) }
axios fournit une interface pour l'interception des requêtes et l'interception des réponses. Chaque requête appellera la méthode showFullScreenLoading, et chaque réponse appellera la méthode 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) })
<🎜. >
Ensuite, ce que fait showFullScreenLoading tryHideFullScreenLoading() est de fusionner les requêtes en même temps. Déclarez une variable needLoadingRequestCount et appelez la méthode showFullScreenLoading needLoadingRequestCount + 1 à chaque fois. Appelez la méthode tryHideFullScreenLoading(), needLoadingRequestCount - 1. Lorsque needLoadingRequestCount est égal à 0, le chargement se termine.let needLoadingRequestCount = 0 export function showFullScreenLoading() { if (needLoadingRequestCount === 0) { startLoading() } needLoadingRequestCount++ } export function tryHideFullScreenLoading() { if (needLoadingRequestCount <= 0) return needLoadingRequestCount-- if (needLoadingRequestCount === 0) { endLoading() } }
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() }
Amélioration de la fonction
En fait, la fonction actuelle est encore un peu pire. Si une certaine requête ne nécessite pas de chargement, ajoutez simplement le paramètre showLoading: false lors de l'envoi de la requête. Lors de l'interception de la demande et de l'interception de la réponse, déterminez si la demande nécessite un chargement. Si un chargement est requis, appelez la méthode showFullScreenLoading(). Lors de l'encapsulation de la demande de publication, l'objet de configuration a été ajouté au troisième paramètre. la configuration inclut le showloading. Traitez-les ensuite séparément dans l’intercepteur.// 请求拦截器 $.interceptors.request.use((config) => { if (config.showLoading) { showFullScreenLoading() } return config }) // 响应拦截器 $.interceptors.response.use((response) => { if (response.config.showLoading) { tryHideFullScreenLoading() } return response })
Explication détaillée de l'introduction mondiale par Vue de la solution de traitement bass.scss
JS construit un arbre binaire pour supprimer les tableaux numériques Explication détaillée de l'accentuation et de l'optimisation
Explication détaillée de l'insertion d'arbre rouge-noir et exemples de méthodes d'implémentation Javascript
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!