当前位置:   article > 正文

vue element 实现全局加载 Loading_element全局loading

element全局loading
  • 请求发起的时候开始loading,响应结束的时候关闭loading
  1. /**
  2. * 全局请求方式
  3. */
  4. import axios from 'axios'
  5. import Vue from 'vue'
  6. import router from '@/router/index'
  7. import {Message,Loading} from 'element-ui' //项目已经全局引入element的话可以不单独引入
  8. let loading = null //定义loading变量
  9. //开始 加载loading
  10. let startLoading=()=>{
  11. loading = Loading.service({
  12. lock: true,
  13. text: '加载中……',
  14. background: 'rgba(0, 0, 0, 0.7)'
  15. })
  16. }
  17. //结束 取消loading加载
  18. let endLoading=()=>{
  19. loading.close()
  20. }
  21. //showFullScreenLoading() 与 tryHideFullScreenLoading() 目的是合并同一页面多个请求触发loading
  22. let needLoadingRequestCount = 0 //声明一个变量
  23. let showFullScreenLoading=()=> {
  24. if (needLoadingRequestCount === 0) { //当等于0时证明第一次请求 这时开启loading
  25. startLoading()
  26. }
  27. needLoadingRequestCount++ //全局变量值++
  28. }
  29. let tryHideFullScreenLoading=()=> {
  30. if (needLoadingRequestCount <= 0) return //小于等于0 证明没有开启loading 此时return
  31. needLoadingRequestCount-- //正常响应后 全局变量 --
  32. if (needLoadingRequestCount === 0) { //等于0 时证明全部加载完毕 此时结束loading 加载
  33. endLoading()
  34. }
  35. }
  36. const service = axios.create({
  37. baseURL: process.env.VUE_APP_BASEURL,
  38. timeout: 5000, // request timeout
  39. headers: {
  40. 'Content-Type': 'application/json;'
  41. },
  42. });
  43. service.interceptors.request.use(
  44. config => {
  45. //开启loading加载
  46. showFullScreenLoading()
  47. return config
  48. },
  49. error => {
  50. return Promise.reject(error)
  51. }
  52. );
  53. service.interceptors.response.use(
  54. response => {
  55. //关闭loading加载
  56. tryHideFullScreenLoading()
  57. return Promise.reject(response.data)
  58. },
  59. error => {
  60. return Promise.reject(error)
  61. }
  62. );
  63. export default service

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/218929?site
推荐阅读
相关标签
  

闽ICP备14008679号