我想要实现发生Ajax请求的时候显示加载框,而当得到Ajax响应时关闭。
VUE-SPINTER很漂亮,但是我找不到相关方法的文档,而且,选项配置也不友好。有什么解决方案吗?
2021-01-06 12:59创建
共2个回答
UJ
游客uJLTPs
你可以使用Vue实例的event bus来实现。
首先在eventhub.js
创建一个Event Bus Vue实例
export const eventHub = new Vue();
其次在Axios模块中通过拦截器激发事件
import { eventHub } from 'eventhub'
function createAxios() {
const axios = Axios.create({ ... });
axios.interceptors.request.use(
conf => {
eventHub.$emit('before-request');
return conf;
},
error => {
eventHub.$emit('request-error');
return Promise.reject(error);
}
);
axios.interceptors.response.use(
response => {
eventHub.$emit('after-response');
return response;
},
error => {
eventHub.$emit('response-error');
return Promise.reject(error);
}
);
return axios;
}
最后,在App.vue
中监听相关事件
import { eventHub } from 'utils/eventhub'
export default {
data () {
return { spinnerVisible: false }
},
methods: {
showSpinner() {
console.log('show spinner');
this.spinnerVisible = true;
},
hideSpinner() {
console.log('hide spinner');
this.spinnerVisible = false;
}
},
created() {
eventHub.$on('before-request', this.showSpinner);
eventHub.$on('request-error', this.hideSpinner);
eventHub.$on('after-response', this.hideSpinner);
eventHub.$on('response-error', this.hideSpinner);
},
beforeDestroy() {
eventHub.$off('before-request', this.showSpinner);
eventHub.$off('request-error', this.hideSpinner);
eventHub.$off('after-response', this.hideSpinner);
eventHub.$off('response-error', this.hideSpinner);
}
}