loading.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. /**
  2. * 全局loading效果:合并多次loading请求,避免重复请求
  3. * 当调用一次showLoading,则次数+1;当次数为0时,则显示loading
  4. * 当调用一次hideLoading,则次数-1; 当次数为0时,则结束loading
  5. */
  6. import { ElLoading } from "element-plus";
  7. // 定义一个请求次数的变量,用来记录当前页面总共请求的次数
  8. let loadingRequestCount = 0;
  9. // 初始化loading
  10. let loadingInstance: any;
  11. // 编写一个显示loading的函数 并且记录请求次数 ++
  12. const showLoading = (target?: any | null) => {
  13. if (loadingRequestCount === 0) {
  14. // element的服务方式 target 我这边取的是表格class
  15. // 类似整个表格loading和在表格配置v-loading一样的效果,这么做是全局实现了,不用每个页面单独去v-loading
  16. const params = Object.assign({lock: true,
  17. text: '加载中...',
  18. background: 'rgba(0, 0, 0, 0.7)'}, target);
  19. loadingInstance = ElLoading.service({ ...params });
  20. }
  21. loadingRequestCount++;
  22. };
  23. // 编写一个隐藏loading的函数,并且记录请求次数 --
  24. const hideLoading = () => {
  25. if (loadingRequestCount <= 0) return;
  26. loadingRequestCount--;
  27. if (loadingRequestCount === 0) {
  28. loadingInstance.close();
  29. }
  30. };
  31. export { showLoading, hideLoading };