首页 > 其他分享 >基于element-plus全局封装Loading

基于element-plus全局封装Loading

时间:2023-11-23 14:12:53浏览次数:38  
标签:ElLoading loadingInstance loading service element Loading plus needLoadingReques

代码

新建一个loading.ts文件

import {
  ElLoading
} from "element-plus";

/* 全局请求 loading */
let loadingInstance: ReturnType < typeof ElLoading.service > ;

/**
 * @description 开启 Loading
 * */
const startLoading = () => {
  loadingInstance = ElLoading.service({
    fullscreen: true,
    lock: true,
    text: "Loading",
    background: "rgba(0, 0, 0, 0.7)"
  });
};

/**
 * @description 结束 Loading
 * */
const endLoading = () => {
  loadingInstance.close();
};

/**
 * @description 显示全屏加载
 * */
let needLoadingRequestCount = 0;
export const showFullScreenLoading = () => {
  if (needLoadingRequestCount === 0) {
    startLoading();
  }
  needLoadingRequestCount++;
};

/**
 * @description 隐藏全屏加载
 * */
export const tryHideFullScreenLoading = () => {
  if (needLoadingRequestCount <= 0) return;
  needLoadingRequestCount--;
  if (needLoadingRequestCount === 0) {
    endLoading();
  }
};

当使用 Element Plus 组件库时,可以实现全局请求 loading 功能。上面提供的代码就是一个示例,下面是对该示例代码的完整分析。

一、初始化

首先,代码通过 import 语句从 “element-plus” 模块中导入了 ElLoading 对象,它是 Element Plus 组件库中的一个加载组件。

然后,定义了一个变量 loadingInstance,其类型为 ReturnType,表示 ElLoading.service 方法的返回值类型,用来存储 ElLoading.service 方法返回的 loading 实例。

二、方法说明

1. startLoading()

该方法用于开启 loading,创建一个 loading 实例,并显示在全屏上。它通过调用 ElLoading.service 方法创建一个 loading 实例,并传入一些配置选项,包括是否全屏、是否锁定背景、加载文本和背景颜色。

2. endLoading()

该方法用于结束 loading,关闭之前创建的 loading 实例。它调用 loadingInstance.close() 来关闭 loading 实例。

3. showFullScreenLoading()

该方法用于显示全屏加载。它会根据 needLoadingRequestCount 变量的值判断当前是否已经有正在进行的请求。如果 needLoadingRequestCount 的值为 0,则调用 startLoading 方法开启 loading。

4. tryHideFullScreenLoading()

该方法用于隐藏全屏加载。它会根据 needLoadingRequestCount 变量的值来判断是否需要关闭 loading。每次调用该方法时,将 needLoadingRequestCount 的值减一,当 needLoadingRequestCount 的值减少到 0 时,调用 endLoading 方法来关闭 loading。

实现全局 loading 功能
在使用这些方法时,需要在每个请求发送前调用 showFullScreenLoading 方法,在请求结束后调用 tryHideFullScreenLoading 方法。通过控制 needLoadingRequestCount 变量的值来决定是否显示或隐藏 loading。

5.难点分析

loadingInstance 是一个变量,它的类型是通过调用 ElLoading.service 方法的返回值类型。在这段代码中,ReturnType 的作用是获取 ElLoading.service 方法的返回值类型。
通过 typeof ElLoading.service 获取 ElLoading.service 方法的类型,然后通过 ReturnType 获取该方法的返回值类型。这样,loadingInstance 的类型就是 ElLoading.service 方法的返回值类型。
通过将 ElLoading.service 返回的实例赋值给 loadingInstance,可以对该 loading 实例进行操作,如开启 loading、关闭 loading 等。

这样做可以实现全局请求 loading 功能,让用户在请求进行中时能够看到 loading 的状态,提升用户体验。

标签:ElLoading,loadingInstance,loading,service,element,Loading,plus,needLoadingReques
From: https://www.cnblogs.com/tn666/p/17851415.html

相关文章

  • vue element 表格定位到某行
    /***@description:通过表格索引定位表格的位置*@param{refName}table的ref值*@param{index}table的索引值*@return:*@author:hch*/$tableScrollMove(refName,index=0){if(!refName||!this.$refs[refName])r......
  • mybatis-plus 使用总结
    Java开发组件1.IDEA2.JDK3.Git4.Maven安装配置5.Mysql6.Mybatis7.Mybatis-plus8.Nacos9.Openfeign10.Gateway11.xxl-job-admin12.Skywalking13.Sentinel14.Arthas15.Redis16.Mongodb17.ES18.StarRocks19.Datax-----------------mybatis-plus使用总结--------......
  • mybatis plus order by 不支持convert函数
    最近业务上有个需求,要按照企业名称中文进行排序显示。项目使用的是mybatisplus+mysql从网上看到的排序解决方法是使用mysql的convert函数:select*from客户表where***orderbyconvert(`企业名称`usingGBK);为什么要使用convert函数那?因为一般使用的数据编码是utf-8,m......
  • elementUI中关于 el-table 表尾合计行列子
    列表中数量和金额需要统计并显示单位:统计后的效果如下:    <el-tablev-loading="loading"border:data="List"@selection-change="handleSelectionChange"show-summary:summary-method="getSummaries&quo......
  • Maybatis-Plus 数据库查询 lambdaQuery和mapper中EQ、NE、GT、LT、GE、LE、select、li
    Maybatis-PluslambdaQuery和mapper中EQ、NE、GT、LT、GE、LE的用法及详解实体当前实体如下,后续代码示例都用该实体;@Data@TableName("user_info")@ApiModel(value="UserInfo对象",description="")publicclassUserInfoimplementsSerializable{privatesta......
  • 1.MyBatisPlus代码生成器使用
    在项目开发中,快速生成entity、mapper、service、controller包中的简单接口和类能够加速我们开发的速度时间。为此,我们可以使用MyBatis-Plus的代码生成器快速生成前面几个包的接口和代码。快速生成代码的流程依次是:引入依赖、配置文件、编写生成类并启动。1.引入依赖 为......
  • MyBatisPlus 注解方式实现多表关联查询
    Mapper写法:@Select("SELECT*FROMtableAaLEFTJOINtableBbona.key=b.key${ew.customSqlSegment}")Listmethod1(@Param(Constants.WRAPPER)QueryWrapperwrapper);IPagemethod2(Page<>page,@Param(Constants.WRAPPER)QueryWrapperwrapper......
  • mybatisplus实现一次多表联查+分页查询
    以书籍整理为例,书籍是一个单独的表,书籍类别是另一个表,通过书籍通过类别的ID可以查询到书籍类别的具体名称,下面分享一下代码://mapperIPage<BookInfo>selectBookPage(IPage<BookInfo>page,@Param(Constants.WRAPPER)QueryWrapper<BookInfo>wrapper); //servicepublic......
  • element-ui全局添加加载遮罩层
    创建loading.js文件import{Loading}from'element-ui';letloadingCount=0;letloading;conststartLoading=()=>{loading=Loading.service({lock:false,spinner:'el-icon-loading',background:'rgba(0,0,0,.5)......
  • Element UI树形表格刷新保留之前展开的列
     完整链接: ElementUI树形表格刷新自动展开_element表格刷新之后仍然是展开状态_HyunDerek的博客-CSDN博客......