為vue項目自動設置請求狀態(tài)的配置方法
在進入一個頁面的時候,一般在獲取數(shù)據(jù)的同時,會先顯示一個 loading ,等請求結束再隱藏 loading 渲染頁面,只需要用一個屬性去記錄請求的狀態(tài),再根據(jù)這個狀態(tài)去渲染頁面就好了
async handler() {
this.loading = true
await fetch()
this.loading = false
}
雖然是很簡單的功能,可是要處理的地方多的時候,還是很繁瑣的,就想著能不能統(tǒng)一設置處理請求的 loading ,然后頁面根據(jù) loading 的狀態(tài)決定要顯示的內容,就根據(jù)自己的想法做了一些封裝,自動給所有 ajax 請求設置 loading 狀態(tài),主要思路是把所有請求集中到單一實例上,通過 proxy 代理屬性訪問,把 loading 狀態(tài)提交到 store 的 state 中
安裝
$ npm install vue-ajax-loading
演示
使用
配置 store 的 state 及 mutations
import { loadingState, loadingMutations } from 'vue-ajax-loading'
const store = new Vuex.Store({
state: {
...loadingState
},
mutations: {
...loadingMutations
}
})
把所有請求集中到一個對象上
import { ajaxLoading } from 'vue-ajax-loading'
import axios from 'axios'
import store from '../store' // Vuex.Store 創(chuàng)建的實例
axios.defaults.baseURL = 'https://cnodejs.org/api/v1'
// 把請求集中到單一對象上,如:
const service = {
global: {
// 全局的請求
getTopics() {
return axios.get('/topics')
},
getTopicById(id = '5433d5e4e737cbe96dcef312') {
return axios.get(`/topic/${id}`)
}
},
modules: {
// 有命名空間的請求,命名空間就是 topic
topic: {
getTopics() {
return axios.get('/topics')
},
getTopicById(id = '5433d5e4e737cbe96dcef312') {
return axios.get(`/topic/${id}`)
}
}
}
}
export default ajaxLoading({
store,
service
})
完成以上配置之后,通過上面 export default 出來的對象去發(fā)送請求,就會自動設置請求的狀態(tài),然后可以在組件內通過 this.$store.state.loading 或 this.$loading 去訪問請求狀態(tài),如:
<el-button type="primary" :loading="$loading.getTopics" @click="handler1">getTopics</el-button>
<el-button type="primary" :loading="$loading.delay" @click="delay">定時兩秒</el-button>
<el-button type="primary" :loading="$loading.topic.getTopics" @click="handler3">topic.getTopics</el-button>
import api from 'path/to/api'
export default {
methods: {
handler1() {
api.getTopics()
},
handler3() {
api.topic.getTopics()
},
delay() {
api.delay()
}
}
}
Options
store
Vuex.Store 創(chuàng)建的實例
service
包含所有請求的對象,可以配置 global 和 modules 屬性
- global:全局作用域的請求,可以設置為 對象 或 數(shù)組對象
- modules:帶命名空間的請求,類型為 對象 ,屬性名即為命名空間
總結
以上所述是小編給大家介紹的為vue項目自動設置請求狀態(tài)的配置方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!
相關文章
關于pinia的使用和持久化方式(pinia-plugin-persistedstate)
本文介紹了Pinia的使用方法,包括安裝和配置插件pinia-plugin-persistedstate,以及在項目中創(chuàng)建和使用Store模塊,同時,還講解了Pinia的state、getters和actions的使用,并提供了在uniapp中使用持久化插件的總結2025-02-02
VUE獲取Promise對象中PromiseResult中的數(shù)據(jù)(最新推薦)
如果想要在接口請求方法的外面拿到請求的結果,再做相關數(shù)據(jù)處理,往往我們拿到的卻是一個Promise對象,那么遇到這樣的問題如何解決呢,下面小編給大家?guī)砹薞UE?項目中?如何獲取Promise對象中的PromiseResult中的數(shù)據(jù)?,感興趣的朋友一起看看吧2023-10-10
Vue Transition實現(xiàn)類原生組件跳轉過渡動畫的示例
本篇文章主要介紹了Vue Transition實現(xiàn)類原生組件跳轉過渡動畫的示例,具有一定的參考價值,有興趣的可以了解一下2017-08-08
詳解Vue.js基于$.ajax獲取數(shù)據(jù)并與組件的data綁定
這篇文章主要介紹了詳解Vue.js基于$.ajax獲取數(shù)據(jù)并與組件的data綁定,非常具有實用價值,需要的朋友可以參考下2017-05-05

