我目前正在构建一个 vue 应用程序,我正在使用 axios。我有一个加载图标,我在每次调用之前显示并在之后隐藏。
我只是想知道是否有办法在全球范围内做到这一点,所以我不必在每次通话时都写显示/隐藏加载图标?
这是我现在拥有的代码:
context.dispatch('loading', true, {root: true});
axios.post(url,data).then((response) => {
// some code
context.dispatch('loading', false, {root: true});
}).catch(function (error) {
// some code
context.dispatch('loading', false, {root: true});color: 'error'});
});
我在 axios 文档上看到有“拦截器”,但我不知道它们是在全局级别还是在每次调用中。
我还看到了这篇关于 jquery 解决方案的帖子,但不确定如何在 vue 上实现它:
$('#loading-image').bind('ajaxStart', function(){
$(this).show();
}).bind('ajaxStop', function(){
$(this).hide();
});
原文由 Brad 发布,翻译遵循 CC BY-SA 4.0 许可协议
我会在根组件的
created
生命周期挂钩中设置 Axios 拦截器(例如App.vue
):由于您可能有多个并发 Axios 请求,每个请求具有不同的响应时间,因此您必须跟踪请求计数以正确管理全局加载状态(每个请求递增,每个请求解决时递减,计数时清除加载状态达到 0):
演示