首頁 web前端 js教程 用Axios Element實作全域的請求loading的方法

用Axios Element實作全域的請求loading的方法

May 30, 2018 am 10:46 AM
axios element 請求

本篇文章主要介紹了用Axios Element實現全域的請求loading的方法,現在分享給大家,也給大家做個參考。

背景

業務需求是這樣子的,每當發送請求到後端時就觸發一個全螢幕的 loading,多個請求合併為一次 loading。

現在專案中用的是 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 = 0

export 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 &#39;element-ui&#39;
let loading
function startLoading() {
 loading = Loading.service({
  lock: true,
  text: &#39;加载中……&#39;,
  background: &#39;rgba(0, 0, 0, 0.7)&#39;
 })
}

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實作方法範例

############################ #######

以上是用Axios Element實作全域的請求loading的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在Vue應用程式中使用axios時出現「Uncaught (in promise) Error: Request failed with status code 500」怎麼辦? 在Vue應用程式中使用axios時出現「Uncaught (in promise) Error: Request failed with status code 500」怎麼辦? Jun 24, 2023 pm 05:33 PM

在Vue應用程式中使用axios是十分常見的,axios是一種基於Promise的HTTP客戶端,可以用於瀏覽器和Node.js。在開發過程中,有時會出現「Uncaught(inpromise)Error:Requestfailedwithstatuscode500」的錯誤提示,對於開發者來說,這個錯誤提示可能有些難以理解和解決。本文將會探討這

Vue中資料請求的選擇:Axios or Fetch? Vue中資料請求的選擇:Axios or Fetch? Jul 17, 2023 pm 06:30 PM

Vue中資料請求的選擇:AxiosorFetch?在Vue開發中,處理資料請求是一個非常常見的任務。而選擇使用哪種工具來進行資料請求,則是需要考慮的問題。在Vue中,最常見的兩種工具是Axios和Fetch。本文將會比較這兩種工具的優缺點,並給出一些範例程式碼來幫助你做出選擇。 Axios是一個基於Promise的HTTP客戶端,可以在瀏覽器和Node.

element.style怎麼修改 element.style怎麼修改 Nov 24, 2023 am 11:15 AM

element.style修改元素的方法:1、修改元素的背景顏色;2、修改元素的字體大小;3、修改元素的邊框樣式;4、修改元素的字體樣式;5、修改元素的水平對齊方式。詳細介紹:1、修改元素的背景顏色,其語法為「document.getElementById("myElement").style.backgroundColor = "red";」;2、修改元素的字體大小等等。

在Vue應用程式中使用axios時出現「TypeError: Failed to fetch」怎麼辦? 在Vue應用程式中使用axios時出現「TypeError: Failed to fetch」怎麼辦? Jun 24, 2023 pm 11:03 PM

最近,在使用Vue應用程式開發過程中,我遇到了一個常見的問題:「TypeError:Failedtofetch」錯誤提示。這個問題出現在使用axios進行HTTP請求時,後端伺服器沒有正確回應請求時發生。這種錯誤提示通常表示請求無法到達伺服器,可能是由於網路原因或伺服器未回應造成的。出現這個錯誤提示後,我們該怎麼辦呢?以下是一些解決方法:檢查網路連接由於

在Vue應用程式中使用axios時出現「Error: Network Error」怎麼解決? 在Vue應用程式中使用axios時出現「Error: Network Error」怎麼解決? Jun 25, 2023 am 08:27 AM

在Vue應用程式中使用axios時出現「Error:NetworkError」怎麼解決?在Vue應用程式的開發中,我們常常會使用到axios進行API的請求或資料的獲取,但是有時我們會遇到axios請求出現「Error:NetworkError」的情況,這時我們該怎麼辦呢?首先,需要了解「Error:NetworkError」是什麼意思,它通常表示網路連

高效利用Vue和Axios實現前端資料的批次處理 高效利用Vue和Axios實現前端資料的批次處理 Jul 17, 2023 pm 10:43 PM

高效利用Vue和Axios實現前端資料的批次處理在前端開發中,資料的處理是一個常見的任務。當我們需要處理大量資料時,如果沒有有效的方法,處理資料將會變得十分繁瑣和低效。 Vue是一種優秀的前端框架,而Axios是一個流行的網路請求庫,它們可以協同工作來實現前端資料的批次處理。本文將詳細介紹如何有效利用Vue和Axios來進行資料的批次處理,並提供相關的程式碼範例

怎麼使用vue3+ts+axios+pinia實現無感刷新 怎麼使用vue3+ts+axios+pinia實現無感刷新 May 25, 2023 pm 03:37 PM

vue3+ts+axios+pinia實作無感刷新1.先在專案中下載aiXos和pinianpmipinia--savenpminstallaxios--save2.封裝axios請求-----下載js-cookienpmiJS-cookie-s//引入aixosimporttype{AxiosRequestConfigig ,AxiosResponse}from"axios";importaxiosfrom'axios';import{ElMess

在Vue應用程式中使用axios時出現「Error: timeout of xxxms exceeded」怎麼辦? 在Vue應用程式中使用axios時出現「Error: timeout of xxxms exceeded」怎麼辦? Jun 24, 2023 pm 03:27 PM

在Vue應用程式中使用axios時出現「Error:timeoutofxxxmsexceeded」怎麼辦?隨著網路的快速發展,前端技術也不斷地更新迭代,Vue作為優秀的前端框架,近年來受到大家的歡迎。在Vue應用程式中,我們常常需要使用axios來進行網路請求,但是有時候會出現「Error:timeoutofxxxmsexceeded」的錯誤

See all articles