关于Element Loading的全局使用(自定义Loading)

 更新时间:2024年08月27日 16:56:44   作者:芒果沙冰哟  
这篇文章主要介绍了关于Element Loading的全局使用(自定义Loading),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Element Loading的全局使用(自定义Loading)

方法一

写在axios的配置中,在请求拦截器中调用,响应拦截器里面关闭

import axios from 'axios';
import qs from 'qs';
import { Message, Loading } from 'element-ui';
import { getToken } from "@/utils/token.js";
const baseUrl=`http://157:8852`;
const service = axios.create({
  baseURL: baseUrl,
  timeout: 60000,
});

service.defaults.headers["Content-Type"] = "application/json;charset=utf-8";

let loading = null; //定义loading变量

//开始 加载loading
let startLoading = () => {
  loading = Loading.service({
    lock: true,
    text: 'Loading',
    spinner: 'el-icon-loading',
    background: 'rgba(0, 0, 0, 0.8)'
  })
}
//结束 取消loading加载
let endLoading = () => {
  loading.close();
}

let needLoadingRequestCount = 0 //声明一个变量
 
let showFullScreenLoading = () => {
  if (needLoadingRequestCount === 0) { //当等于0时证明第一次请求 这时开启loading
    startLoading()
  }
  needLoadingRequestCount++ //全局变量值++ 
}
 
let tryHideFullScreenLoading = () => {
  if (needLoadingRequestCount <= 0) return //小于等于0 证明没有开启loading 此时return
  needLoadingRequestCount-- //正常响应后 全局变量 --
  if (needLoadingRequestCount === 0) {  //等于0 时证明全部加载完毕 此时结束loading 加载
    endLoading();
  }
}

// 请求拦截器
service.interceptors.request.use((config) => {
    if (getToken()) {
      config.headers["Authorization"] = getToken();
    }
  if (config.url.indexOf('queryExecuteOnce') > -1) {
    console.log("1111", config.url);
  } else {
    //开启loading加载
    showFullScreenLoading();
  }
  return config;
}, (err) => {
  Message.error('请求失败!');
  return Promise.reject(err);
})

// 响应拦截器
service.interceptors.response.use((response) => {
  if (response.data.code == 302) {
    Message.warning('登录超时,请重新登录!');
    return;
  }
  //关闭loading加载
  tryHideFullScreenLoading();
  return response
}, (err) => {
  tryHideFullScreenLoading();
  if (err.toString().indexOf('Error: timeout') !== -1) {
    Message.warning('网络请求超时!');
    return Promise.reject(err);
  } else {
    Message.error('服务器响应失败,请稍后再试!');
    return Promise.reject(err);
  }
})

方法二

将自定义样式写在公共css中,在需要的文件里面进行调用

代码块:

//公共css样式
.svg-container .el-input__inner {
padding-left: 40px;
}
.svg-container .flex {
display: flex;
align-items: center;
height: 100%;
}
.el-loading-spinner .circular {
display: none;
}
.el-loading-spinner {
width: 100px;
height: 100px;
top: 50%;
left: 50%;
transform: translate(-50px, -50px);
background: url("../assets/img/loading.png");
background-size: 100% 100%;
margin-top: 0px;
}
.el-loading-mask {
z-index: 9999 !important;
}
//vue文件调用方法
handleClickOne() {
const loading = this.$loading({
lock: true,
text: "",
spinner: "",
background: "rgba(255, 255, 255, 0.8)",
});
setTimeout(() => {
loading.close();
}, 2000);
},

方法三

封装在utils公共方法中,在需要的页面进行调用

代码块:

import { Loading } from 'element-ui'
let loadingCount = 0
let loading

const startLoading = () => {
loading = Loading.service({
lock: true,
text: '查验中,请稍等……',
background: 'rgba(0, 0, 0, 0.5)',
color: '#fff',
})
}

const endLoading = () => {
loading.close()
}
export const showLoading = () => {
if (loadingCount === 0) {
startLoading()
}
loadingCount += 1
}

export const hideLoading = () => {
if (loadingCount <= 0) {
return
}
loadingCount -= 1
if (loadingCount === 0) {
endLoading()
}
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • element UI 中的 el-tree 实现 checkbox 单选框及 bus 传递参数功能

    element UI 中的 el-tree 实现 checkbox&n

    在日常项目开发中,会经常遇到,树形结构的查询方式,为了快速方便开发,常常会使用到快捷的ui组件去快速搭树形结构,这里我用的是 element ui 中的 el-tree,对element UI 中的 el-tree 实现 checkbox 单选框及 bus 传递参数的方法感兴趣的朋友跟随小编一起看看吧
    2022-09-09
  • 浅谈Vue 数据响应式原理

    浅谈Vue 数据响应式原理

    这篇文章主要介绍了浅谈Vue 数据响应式原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Vue3 Props没有默认值但报错的解决方案

    Vue3 Props没有默认值但报错的解决方案

    这篇文章主要介绍了Vue3 Props没有默认值但报错的解决方案,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-04-04
  • Vue项目中new Vue()和export default{}的区别说明

    Vue项目中new Vue()和export default{}的区别说明

    这篇文章主要介绍了Vue项目中new Vue()和export default{}的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • uniapp中easycom用法实例详解

    uniapp中easycom用法实例详解

    easycom是Uniapp框架中非常方便的组件自动注册机制,可以大大简化组件的使用和管理,这篇文章主要介绍了uniapp中easycom用法详解,需要的朋友可以参考下
    2023-03-03
  • vue spa应用中的路由缓存问题与解决方案

    vue spa应用中的路由缓存问题与解决方案

    这篇文章主要介绍了vue spa应用中的路由缓存问题与解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • 在vue2.0中引用element-ui组件库的方法

    在vue2.0中引用element-ui组件库的方法

    这篇文章主要介绍了在vue2.0中引用element-ui组件库,需要的朋友可以参考下
    2018-06-06
  • Windows系统下使用nginx部署vue2项目的全过程

    Windows系统下使用nginx部署vue2项目的全过程

    nginx是一个高性能的HTTP和反向代理服务器,因此常用来做静态资源服务器和后端的反向代理服务器,下面这篇文章主要给大家介绍了关于Windows系统下使用nginx部署vue2项目的相关资料,需要的朋友可以参考下
    2023-03-03
  • 一篇带你搞懂Vue中的自定义指令

    一篇带你搞懂Vue中的自定义指令

    自定义指令,是Vue提供的一种扩展和定制的机制,使开发者能够在组件中直接操作DOM、处理事件、添加样式等,并提供了与第三方库集成的方式,定义指令使得Vue在处理交互和DOM操作时更加灵活和强大,本文将带大家搞懂Vue中的自定义指令,需要的朋友可以参考下
    2023-07-07
  • vue如何实现跨页面传递与接收数组并赋值

    vue如何实现跨页面传递与接收数组并赋值

    这篇文章主要介绍了vue如何实现跨页面传递与接收数组并赋值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04

最新评论