Je veux implémenter un processus comme ci-dessous:
Lorsqu'une demande http est en cours, affichez un chargeur. Une fois les requêtes terminées, masquez le chargeur.
Je ne sais pas si je vous comprends, mais je suppose que vous voulez un chargeur lorsqu'une demande http est en cours, je vais donc montrer la logique.J'espère comprendre
<template>
<div>
<div v-if="loading">
<!-- here put a spinner or whatever you want to do when request is on proccess -->
</div>
<div v-if="!loading">
<!-- here is your application code -->
</div>
</div>
</template>
<script>
import axios from 'axios'
export default {
data() {
return {
loading: false
}
},
methods: {
makeRequest () {
this.loading = true //the loading begin
axios.get('/example')
.then(response => {
this.loading = false //the loading stop when the response given from server
//do whatever with response
})
.catch(error => {
this.loading = false
//do whatever with response
})
}
}
}
</script>
J'espère que vous comprenez. Pour plus d'informations, pour l'envoi d'une demande http, j'utilise axios et j'utilise également v-if dans les deux cas, mais dans le deuxième div, vous pouvez utiliser v-else
Uniquement pour les utilisateurs de Nuxt.js
l'exemple écrit par roli est excellent, mais idéalement vous ne voulez pas vous répéter à chaque demande que vous faites. donc je vous suggère de faire comme ça grâce à: https://stackoverflow.com/a/58084093/1031297
Ajoutez ['@ nuxtjs/axios'] ....
Ajouter ou modifier plugins/axios.js
export default ({ app, $axios ,store }) => {
$axios.interceptors.request.use((config) => {
store.commit("SET_DATA", { data:true, id: "loading" });
return config;
}, (error) => {
return Promise.reject(error);
});
$axios.interceptors.response.use((response) => {
store.commit("SET_DATA", { data:false, id: "loading" });
return response;
}, (error) => {
return Promise.reject(error);
});
}
avec le magasin étant
export default {
state: () => ({
loading: false
}),
mutations: {
SET_DATA(state, { id, data }) {
state[id] = data
}
},
actions: {
}
}