国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

vuex+axios+element-ui實現頁面請求loading操作示例

2024-05-06 15:43:59
字體:
來源:轉載
供稿:網友

本文實例講述了vuex+axios+element-ui實現頁面請求loading操作。分享給大家供大家參考,具體如下:

前言

我們在平常寫項目的時候,發請求的時候肯定會習慣用一個 loading 遮罩層來防止用戶在沒拿到數據之前誤操作

如果是頁面同時只發送一個請求,那么無論是在組件中或者是在 axios 插件中進行請求和響應攔截都可以做到

但是,當一個頁面同時要發送多個請求的時候,這么做顯然就不行了

因為最先完成的請求會把所有請求的 loading 都給關閉

舉個例子,第一個請求的響應時間為 3s ,第二個請求的響應時間為 1s ,兩個同時請求的時候,loading 會開始

但是當 1s 后第二個請求完成后,會直接關閉 loading,但是此時第一個請求還沒完成,所有這樣肯定是不行的

今天就用這篇文章來介紹下我在項目中是怎么應對這種情況的

一、用到的東西

    element-ui 的 loading vuex 的狀態管理 axios 的請求攔截和響應攔截

二、實現

其實這個思路很簡單,就是通過 vuex 來管理請求的個數,假如用 apiCount 這個變量來代表請求的個數,每次請求的時候打開 loading 并且 apiCount  加一,每次響應完成或者失敗的時候都讓 apiCount 減一,并且檢測 apiCount 變量的值,當為 apiCount=0 的時候,就關閉 loading 就可以了,代碼如下:

store.js 代碼(用來管理 vuex)

import Vue from "vue";import Vuex from "vuex";import { Loading } from "element-ui";Vue.use(Vuex);const state = { //請求計數 apiCount: 0, //loading實例 loadingInstance: null,};const mutations = { /* 打開Loading */ startLoading(state, msg) {  state.loadingInstance = Loading.service({   lock: true,   text: msg ? msg : "加載中...",   background: "rgba(0, 0, 0, 0.7)"  }); }, /* 關閉loading */ closeLoading(state) {  state.loadingInstance.close(); }, /* 更新請求線程池 */ updateApiCount(state, handle) {  if (handle == "add") {   state.apiCount++;   this.commit("startLoading");  } else {   state.apiCount--;   if (state.apiCount <= 0) {    this.commit("closeLoading");   }  } }};const store = new Vuex.Store({ state, mutations});export default store;

request.js 代碼(封裝 axios 的文件)

import axios from "axios";import { Message } from "element-ui";import store from "../store/index";import router from "../router/index";const service = axios.create({ baseURL: process.env.VUE_APP_BASE_URL, timeout: 0});service.interceptors.request.use( config => {  store.commit("updateApiCount", "add");  return config; }, error => {  store.commit("updateApiCount", "sub");  Promise.reject(error); });service.interceptors.response.use( response => {  store.commit("updateApiCount", "sub");  return response.data; }, error => {  store.commit("updateApiCount", "sub");  return Promise.reject(error); });export default service;            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 司法| 微山县| 苍溪县| 葵青区| SHOW| 灵石县| 开封市| 沙河市| 潢川县| 湖南省| 遂川县| 景洪市| 广汉市| 汕尾市| 合肥市| 靖江市| 丰镇市| 无为县| 外汇| 犍为县| 开原市| 桑日县| 安新县| 平定县| 商水县| 镇康县| 承德市| 台南县| 阳曲县| 武强县| 达州市| 泰州市| 融水| 洛川县| 南岸区| 锡林郭勒盟| 阳城县| 陆川县| 浦东新区| 乌兰察布市| 仁怀市|