场景

在后台系统中,每次接口提交的时候都需要添加一个loading来告知用户我们正在进行系统操作,但是这样需要我们反复复制代码,并且需要再三确保loading关闭的时机,低劳动且容易忘记

解决

在全局的axios添加服务loading,根据api配置的参数判断是否展示loading,根据接口状态来添加和关闭loading
第一步:axios添加loading服务

  1. // axios.js
  2. import { Loading } from 'element-ui';
  3. // 全局loading
  4. let loadingInstance;
  5. axios.interceptors.request.use((config) => {
  6. // ...一些其他操作
  7. // 判断api中是否有loading参数,有就展示全局loading
  8. if (config.loadingOptions) {
  9. loadingInstance = Loading.service(config.loadingOptions);
  10. }
  11. }, (error) => {
  12. // 请求错误关闭loading
  13. loadingInstance && loadingInstance.close();
  14. // 一些其他操作
  15. });
  16. // 返回状态判断(添加响应拦截器)
  17. axios.interceptors.response.use(response => {
  18. // 响应成功关闭loading
  19. loadingInstance && loadingInstance.close();
  20. }, error => {
  21. // 响应失败关闭loading
  22. loadingInstance && loadingInstance.close();
  23. });

第二步:在想要加loading的接口中加入标识

  1. const getCityConfig = (params) => axios.get(getCityConfigApi, {
  2. params,
  3. loadingOptions: {
  4. fullscreen: true,
  5. text: '请稍等...'
  6. }
  7. });