在单页面中,一个页面可能发送多个请求,如何控制在多个请求都完成了之后才关闭唯一的遮罩,而不是在返回一个遮罩之后就关闭遮罩,可能这时候还有一些接口还未返回,影响用户体验。
解决方法:
在vuex中,设置一个state属性: loading: 0;
mutation中:
1 | [types.CHANGE_LOADING](state, payload) { |
在封装的httpAxios中,在get、post方法中增加一个mask属性,在调用时,传入true/false,表明是否需要遮罩,
1 | get(url, mask, param) { |
在axios的interceptors.request中,判断mask是否为真,如果为真的话就loading++,表明请求需要遮罩;
1 | if (config.mask) { |
interceptors.response 中,判断mask是否为真,如果为真的话就loading–,表明该请求完成;
1 | if (config.mask) { |
最后,因为loading++的值会被loading–减到0,说明所有的请求都完成了,那么在loading组件中,设置v-show=’loading>0’ ,这样就可以控制多个请求都返回了才隐藏遮罩。