最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3使用axios請(qǐng)求攔截器和vuex設(shè)置全局loading方式

 更新時(shí)間:2025年12月17日 09:03:50   作者:莉是我的yo  
本文介紹了如何在Vue.js項(xiàng)目中實(shí)現(xiàn)全局loading加載動(dòng)畫(huà),并通過(guò)axios攔截器控制loading的顯示與隱藏

在開(kāi)發(fā)中使用loading加載動(dòng)畫(huà)是常見(jiàn)的功能。頁(yè)面加載需要時(shí)間,網(wǎng)絡(luò)不好時(shí)也需要時(shí)間,加載的過(guò)程中頁(yè)面就會(huì)出現(xiàn)白屏的狀況,如果沒(méi)有使用loading來(lái)和用戶進(jìn)行交互,用戶并不知道應(yīng)用到底是出現(xiàn)什么問(wèn)題,就會(huì)十分的影響用戶體驗(yàn)。廢話不多說(shuō),直接開(kāi)始。

App.vue

既然是全局loading,那就讓它在全局范圍內(nèi)都生效,我們?cè)诟M件內(nèi)設(shè)置加載動(dòng)畫(huà)(可以設(shè)置css動(dòng)畫(huà),js動(dòng)畫(huà),Vue動(dòng)畫(huà),我這里為了省事,直接使用的gif動(dòng)圖)。設(shè)置完調(diào)整一下css,讓它出現(xiàn)在頁(yè)面正中央。

我們通過(guò)“flage”的值,來(lái)控制loading的顯示與隱藏,因?yàn)槭褂眠^(guò)程中會(huì)經(jīng)常觸發(fā),所以使用v-show合適些。要做到每一次請(qǐng)求都能觸發(fā),就要監(jiān)聽(tīng)“flage”的值,通過(guò)“compued”獲取vuex內(nèi)flage的值(使用計(jì)算屬性,因?yàn)樗芯彺妫偻ㄟ^(guò)“watch”監(jiān)聽(tīng)值的變化,實(shí)時(shí)給flage重新賦值。如何讓每次請(qǐng)求和響應(yīng)都改變flage的值,繼續(xù)往下看。

<template>
  <div>
    <div class="box" v-show="flage">
      <img src="./assets/loading.gif" alt="">
    </div>
    <router-view />
  </div>
</template>
<script>
import store from './store/index'
import { ref } from 'vue'
export default {
  name: 'App',
  setup() {
    let flage = ref(false)
    return {
      flage,
    }
  },
  computed: {
    newData() {
      return store.state.loading
    }
  },
  watch: {
    newData(newVal) {
      this.flage = newVal

    }
  }
}

</script>

<style scoped>
.box {
  width: 100%;
  height: 100%;
  background-color: rgba(243, 243, 243, 0.3);
  position: absolute;
  z-index: 9999
}

img {
  width: 200px;
  height: 200px;
  position: absolute;
  left: 50%;
  top: 30%;
}
</style>

封裝axios攔截器

axios攔截器包括請(qǐng)求攔截和響應(yīng)攔截,對(duì)每一次的請(qǐng)求和響應(yīng)都會(huì)做出處理,那我們就可以在這里通過(guò)vuex來(lái)改變“flage”的值,發(fā)請(qǐng)求時(shí)值為“true”,響應(yīng)時(shí)值為“false”。

import axios from "axios";
import store from '../store'
// 創(chuàng)建axios實(shí)例
const service = axios.create({
  baseURL: "/api",
  timeout: 10000,
});


// 請(qǐng)求攔截器
service.interceptors.request.use(
  (config) => {
    store.commit('setLoading',true)
    return config;
  },
  (error) => {
    // 對(duì)請(qǐng)求錯(cuò)誤做些什么
    return Promise.reject(error);
  }
);

// 響應(yīng)攔截器
service.interceptors.response.use(
  (response) => {
    // 對(duì)響應(yīng)數(shù)據(jù)做點(diǎn)什么
    store.commit('setLoading',false)    let res = response.data;
    return res;
  },
  (error) => {
    // 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么:統(tǒng)一進(jìn)行響應(yīng)錯(cuò)誤的處理
    console.dir(error);
    return Promise.reject(error);
  }
);

export const request = service;

vuex

vuex中state的值是不能直接修改的,簡(jiǎn)單來(lái)說(shuō)state是允許異步操作的,這樣的話就會(huì)出現(xiàn)多個(gè)地方異步調(diào)用時(shí),有的還沒(méi)執(zhí)行完而state里面的值就被修改了,這樣程序就會(huì)報(bào)錯(cuò)。mutations的作用就是阻止異步調(diào)用。需要異步調(diào)用時(shí)要通過(guò)actions里面的方法去調(diào)用mutations里面的方法。扯多了,繼續(xù)看我們的代碼。

import { createStore } from 'vuex'

export default createStore({
  state: {
    loading: false,
  },
  getters: {},
  mutations: {
    setLoading(state, flage){
      state.loading = flage
    }
  },
  actions: {},
  modules: {},
  plugins: []
})

總結(jié)

總體來(lái)說(shuō)設(shè)置全局loading不算難,就是通過(guò)axios的攔截器在每次請(qǐng)求或響應(yīng)后修改loading的顯示與隱藏。

我這里用的是vuex,其實(shí)也可以通過(guò)使用localStorage或sessionStorage來(lái)緩存flage的值,共同點(diǎn)就是都要在axios的攔截器里面去修改。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue中EventBus的使用教程詳解

    vue中EventBus的使用教程詳解

    在Vue中,使用EventBus可以實(shí)現(xiàn)組件間的通信,如何使用EventBus??都需要做哪些配置呢?他的注意事項(xiàng)是什么呢?下面就跟隨小編一起學(xué)習(xí)一下吧
    2024-02-02
  • vite+vue3中如何使用router

    vite+vue3中如何使用router

    這篇文章主要介紹了vite+vue3中如何使用router問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • ?用Vue?Demi?構(gòu)建同時(shí)兼容Vue2與Vue3組件庫(kù)

    ?用Vue?Demi?構(gòu)建同時(shí)兼容Vue2與Vue3組件庫(kù)

    這篇文章主要介紹了?用Vue?Demi?構(gòu)建同時(shí)兼容Vue2與Vue3組件庫(kù),我們通過(guò)考慮其功能、工作原理以及如何開(kāi)始使用它來(lái)了解?Vue?Demi,下面我們一起進(jìn)入文章學(xué)起來(lái)吧
    2022-02-02
  • 詳細(xì)解析Vite的ESM請(qǐng)求處理流程

    詳細(xì)解析Vite的ESM請(qǐng)求處理流程

    本文主要介紹了詳細(xì)解析Vite的ESM請(qǐng)求處理流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • vue 中動(dòng)態(tài)綁定class 和 style的方法代碼詳解

    vue 中動(dòng)態(tài)綁定class 和 style的方法代碼詳解

    這篇文章主要介紹了vue 中動(dòng)態(tài)綁定class 和 style的方法,通過(guò)實(shí)例結(jié)合的形式給大家接受的非常詳細(xì),需要的朋友參考下吧
    2018-06-06
  • vue3+ts+vant移動(dòng)端H5項(xiàng)目搭建的實(shí)現(xiàn)步驟

    vue3+ts+vant移動(dòng)端H5項(xiàng)目搭建的實(shí)現(xiàn)步驟

    本文主要介紹了vue3+ts+vant移動(dòng)端H5項(xiàng)目搭建,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Vue3實(shí)現(xiàn)自定義Input組件的示例詳解

    Vue3實(shí)現(xiàn)自定義Input組件的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用Vue3自定義實(shí)現(xiàn)一個(gè)類(lèi)似el-input的組件,可以v-model雙向綁定,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 一文探索Vue中組件和插件使用細(xì)節(jié)與差異

    一文探索Vue中組件和插件使用細(xì)節(jié)與差異

    Vue組件和插件是Vue生態(tài)系統(tǒng)中的兩種重要概念,它們分別服務(wù)于不同的目的,但都極大地豐富了Vue的功能性和可擴(kuò)展性,下面我們就來(lái)看看二者的用法以及區(qū)別吧
    2024-03-03
  • Vue中addEventListener()?監(jiān)聽(tīng)事件案例講解

    Vue中addEventListener()?監(jiān)聽(tīng)事件案例講解

    這篇文章主要介紹了Vue中addEventListener()?監(jiān)聽(tīng)事件案例講解,包括語(yǔ)法講解和事件冒泡或事件捕獲的相關(guān)知識(shí),本文結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • 使用Vue3實(shí)現(xiàn)在瀏覽器端進(jìn)行zip文件壓縮

    使用Vue3實(shí)現(xiàn)在瀏覽器端進(jìn)行zip文件壓縮

    在前端開(kāi)發(fā)中,我們時(shí)常需要處理文件上傳和下載的功能,本文主要和大家分享一下如何使用Vue3和JSZip庫(kù)在瀏覽器端實(shí)現(xiàn)zip文件壓縮,需要的可以參考下
    2024-05-05

最新評(píng)論

漯河市| 洞头县| 集安市| 大埔县| 墨江| 利辛县| 萍乡市| 汉中市| 九龙城区| 余干县| 湘潭市| 莆田市| 财经| 肃北| 都江堰市| 瑞丽市| 腾冲县| 鄄城县| 岢岚县| 宣汉县| 绍兴市| 丹凤县| 长岛县| 宝鸡市| 福安市| 东辽县| 贵阳市| 太仓市| 易门县| 通河县| 阳江市| 台南市| 福州市| 汝城县| 石泉县| 隆化县| 大田县| 秭归县| 简阳市| 图木舒克市| 昭觉县|