如何在 Element UI 中优雅地使用 `this.$loading` 显示和隐藏加载动画

news2025/7/17 20:09:19

如何在 Element UI 中优雅地使用 this.$loading 显示和隐藏加载动画

在现代 Web 应用开发中,用户体验至关重要。当执行耗时操作(如网络请求或数据处理)时,显示一个友好的加载动画可以让用户知道系统正在工作,而不是卡住了。Element UI 提供了一个非常方便的工具——this.$loading,用于显示全局或局部的加载动画。本文将详细介绍如何在 Vue 组件中使用 this.$loading 来显示和隐藏加载动画,并提供实用的代码示例。


1. 引言

在构建复杂的前端应用时,异步操作是不可避免的。无论是从服务器获取数据还是进行大量计算,都需要一些时间来完成。为了提升用户体验,我们通常会在这些操作期间显示一个加载动画。Element UI 的 this.$loading 工具可以帮助我们轻松实现这一目标。接下来,我们将详细介绍如何使用它。


2. 基本用法

显示加载动画

通过调用 this.$loading(options) 方法可以创建并显示加载动画。返回值是一个加载实例,可以通过该实例手动关闭加载动画。

let loadingInstance = this.$loading({
  lock: true, // 是否锁定屏幕
  text: '加载中...', // 显示的文本
  spinner: 'el-icon-loading', // 自定义加载图标
  background: 'rgba(0, 0, 0, 0.7)' // 背景遮罩颜色
});

隐藏加载动画

可以通过调用加载实例的 close() 方法来关闭加载动画。

loadingInstance.close();

3. 完整示例

以下是一个完整的示例,展示如何在 Vue 组件中使用 this.$loading 来显示和隐藏加载动画。

<template>
  <div>
    <el-button @click="startLoading">开始加载</el-button>
    <el-button @click="stopLoading">停止加载</el-button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      loadingInstance: null // 存储加载实例
    };
  },
  methods: {
    startLoading() {
      // 显示加载动画
      this.loadingInstance = this.$loading({
        lock: true,
        text: '拼命加载中...',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
      });
    },
    stopLoading() {
      // 隐藏加载动画
      if (this.loadingInstance) {
        this.loadingInstance.close();
      }
    }
  }
};
</script>

在这个示例中,我们创建了两个按钮:一个用于启动加载动画,另一个用于停止加载动画。点击“开始加载”按钮后,会显示一个带有自定义文本和图标的加载动画;点击“停止加载”按钮则会关闭该动画。


4. 关键点解析

(1) 参数配置

this.$loading 接受一个配置对象,常用的参数如下:

  • lock:是否锁定屏幕,防止用户交互。
  • text:加载提示文字。
  • spinner:自定义加载图标,默认为 el-icon-loading
  • background:背景遮罩的颜色,支持透明度设置。

(2) 自动关闭

如果需要自动关闭加载动画,可以结合 setTimeout 使用。例如:

startLoading() {
  this.loadingInstance = this.$loading({
    lock: true,
    text: '加载中...'
  });

  // 模拟异步操作后自动关闭
  setTimeout(() => {
    this.loadingInstance.close();
  }, 3000); // 3秒后自动关闭
}

(3) 局部加载

除了全局加载,还可以对某个 DOM 元素进行局部加载。只需在 options 中指定 target 即可。

let loadingInstance = this.$loading({
  target: document.querySelector('#local-element'), // 指定目标元素
  text: '局部加载中...'
});

5. 注意事项

避免重复创建

在调用 this.$loading 时,确保之前创建的加载实例已经关闭。否则可能会导致多个加载动画叠加。可以在显示新加载动画前检查是否存在旧实例,并手动关闭:

if (this.loadingInstance) {
  this.loadingInstance.close();
}

异步操作中的异常处理

在异步操作(如 API 请求)中使用加载动画时,务必在 try-catchfinally 中关闭加载动画,以防止因异常导致加载动画无法关闭。

async fetchData() {
  let loadingInstance = this.$loading({ text: '加载中...' });
  try {
    await someAsyncOperation(); // 模拟异步操作
  } catch (error) {
    console.error('请求失败', error);
  } finally {
    loadingInstance.close(); // 确保加载动画关闭
  }
}

样式覆盖

如果默认的加载样式不符合需求,可以通过 CSS 自定义样式。例如:

.el-loading-spinner .el-loading-text {
  font-size: 16px;
  color: #fff;
}

6. 总结

通过 this.$loading,我们可以轻松实现全局或局部的加载动画,从而提升用户体验。无论是简单的按钮点击还是复杂的异步操作,都可以灵活地应用这一功能。如果你正在寻找一种优雅的方式来管理加载状态,那么这篇文章提供的解决方案无疑是一个不错的选择。

希望本文能为你带来启发,并帮助你在实际开发中解决问题!如果有其他问题或想要了解更多优化技巧,请留言讨论。


关注我获取更多前端开发技巧和实战经验!


注:本文假设读者已经具备一定的 Vue.js 和 Element UI 基础知识。如果你对某个部分不太理解,欢迎留言讨论!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2343211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Langchain】RAG 优化:提高语义完整性、向量相关性、召回率--从字符分割到语义分块 (SemanticChunker)

RAG 优化&#xff1a;提高语义完整性、向量相关性、召回率–从字符分割到语义分块 (SemanticChunker) 背景&#xff1a;提升 RAG 检索质量 在构建基于知识库的问答系统&#xff08;RAG&#xff09;时&#xff0c;如何有效地将原始文档分割成合适的文本块&#xff08;Chunks&a…

深入剖析扣子智能体的工作流与实战案例

前面我们已经初步带大家体验过扣子工作流&#xff0c;工作流程是 Coze 最为强大的功能之一&#xff0c;它如同扣子中蕴含的奇妙魔法工具&#xff0c;赋予我们的机器人处理极其复杂问题逻辑的能力。 这篇文章会带你更加深入地去理解并运用工作流解决实际问题 目录 一、工作流…

基于K8s日志审计实现攻击行为检测

K8s日志审计以一种事件溯源的方式完整记录了所有API Server的交互请求。当K8s集群遭受入侵时&#xff0c;安全管理员可以通过审计日志进行攻击溯源&#xff0c;通过分析攻击痕迹&#xff0c;找到攻击者的入侵行为并还原攻击者的攻击路径&#xff0c;修复安全问题。 在本篇文章中…

【Linux网络编程】应用层协议HTTP(实现一个简单的http服务)

目录 前言 一&#xff0c;HTTP协议 1&#xff0c;认识URL 2&#xff0c;urlencode和urldecode 3&#xff0c;HTTP协议请求与响应格式 二&#xff0c;myhttp服务器端代码的编写 HTTP请求报文示例 HTTP应答报文示例 代码编写 网络通信模块 处理请求和发送应答模块 结…

短视频+直播商城系统源码全解析:音视频流、商品组件逻辑剖析

时下&#xff0c;无论是依托私域流量运营的品牌方&#xff0c;还是追求用户粘性与转化率的内容创作者&#xff0c;搭建一套完整的短视频直播商城系统源码&#xff0c;已成为提升用户体验、增加商业变现能力的关键。本文将围绕三大核心模块——音视频流技术架构、商品组件设计、…

STM32定时器---基本定时器

目录 一、定时器的概述 二、时基单元 三、基本定时器的的时序 &#xff08;1&#xff09;预分频器时序 &#xff08;2&#xff09;计数器时序 四、基本定时器的使用 一、定时器的概述 在没有定时器的时候&#xff0c;我们想要延时往往都是写一个Delay函数&#xff0c;里面…

大模型微调 - transformer架构

什么是Transformer Transformer 架构是由 Vaswani 等人在 2017 年提出的一种深度学习模型架构&#xff0c;首次发表于论文《Attention is All You Need》中 Transformer 的结构 Transformer 编码器&#xff08;Encoder&#xff09; 解码器&#xff08;Decoder&#xff09; …

Sentinel数据S2_SR_HARMONIZED连续云掩膜+中位数合成

在GEE中实现时&#xff0c;发现简单的QA60是无法去云的&#xff0c;最近S2地表反射率数据集又进行了更新&#xff0c;原有的属性集也进行了变化&#xff0c;现在的SR数据集名称是“S2_SR_HARMONIZED”。那么&#xff1a; 要想得到研究区无云的图像&#xff0c;可以参考执行以下…

HTMLCSS模板实现水滴动画效果

.container 类&#xff1a;定义了页面的容器样式。 display: flex&#xff1a;使容器成为弹性容器&#xff0c;方便对其子元素进行布局。justify-content: center 和 align-items: center&#xff1a;分别使子元素在水平和垂直方向上居中对齐。min-height: 100vh&#xff1a;设…

【数据可视化艺术·应用篇】三维管线分析如何重构城市“生命线“管理?

在智慧城市、能源管理、工业4.0等领域的快速发展中&#xff0c;地下管线、工业管道、电力通信网络等“城市血管”的复杂性呈指数级增长。传统二维管理模式已难以应对跨层级、多维度、动态变化的管线管理需求。三维管线分析技术应运而生&#xff0c;成为破解这一难题的核心工具。…

【MinerU】:一款将PDF转化为机器可读格式的工具——RAG加强(Docker版本)

目录 创建容器 安装miniconda 安装mineru CPU运行 GPU加速 多卡问题 创建容器 构建Dockerfile文件 开启ssh服务&#xff0c;设置密码为1234等操作 # 使用官方 Ubuntu 24.04 镜像 FROM ubuntu:24.04# 安装基础工具和SSH服务 RUN apt-get update && \apt-get ins…

Appium自动化开发环境搭建

自动化 文章目录 自动化前言 前言 Appium是一款开源工具&#xff0c;用于自动化iOS、Android和Windows桌面平台上的本地、移动web和混合应用程序。原生应用是指那些使用iOS、Android或Windows sdk编写的应用。移动网页应用是通过移动浏览器访问的网页应用(appum支持iOS和Chrom…

C++学习-入门到精通-【1】C++编程入门,输入/输出和运算符

C学习-入门到精通-【1】C编程入门&#xff0c;输入/输出和运算符 C编程入门&#xff0c;输入/输出和运算符 C学习-入门到精通-【1】C编程入门&#xff0c;输入/输出和运算符第一个C程序&#xff1a;输出一行文本算术运算 第一个C程序&#xff1a;输出一行文本 // 文本打印程序…

面向高性能运动控制的MCU:架构创新、算法优化与应用分析

摘要&#xff1a;现代工业自动化、汽车电子以及商业航天等领域对运动控制MCU的性能要求不断提升。本文以国科安芯的MCU芯片AS32A601为例&#xff0c;从架构创新、算法优化到实际应用案例&#xff0c;全方位展示其在高性能运动控制领域的优势与潜力。该MCU以32位RISC-V指令集为基…

某地农产品交易中心钢网架自动化监测项目

1. 项目简介 本项目规划建设现代物流产业园&#xff0c;新建6万平方米仓库&#xff0c;具体为新建3栋钢构仓库2万平方米&#xff0c;2栋砖混结构仓库1万平方米&#xff0c;3栋交易中心2万平方米&#xff0c;改造现有3栋3层砖混结构仓库1万平方米&#xff0c;配备智能化仓库物流…

【无人机】无人机位置估计出现偏差的原因分析

目录 #0、原因分析 #1、过度振动的测定 #2、确定过度陀螺仪偏差 #3、偏航精度差的测定 #4、确定 GPS 精度差 #5、确定 GPS 数据丢失 #6、气压计地面效应补偿 #0、原因分析 位置背离的最常见原因是&#xff1a; 参考&#xff1a;Using the ECL EKF | PX4 Guide (v1.15)…

element-plus(vue3)表单el-select下拉框的远程分页下拉触底关键字搜索实现

一、基础内核-自定义指令 1.背景 2.定义 3.使用 4.注意 当编辑时需要回显&#xff0c;此时由于分页导致可能匹配不到对应label文本显示&#xff0c;此时可以这样解决 二、升级使用-二次封装组件 三、核心代码 1.自定义指令 定义 ----------------selectLoadMoreDirective.…

轻松完成视频创作,在线视频编辑器,无需下载软件,功能多样实用!

小白工具的在线视频编辑https://www.xiaobaitool.net/videos/edit/ 功能丰富、操作简便&#xff0c;在线裁剪或编辑视频工具&#xff0c;轻松完成视频创作能满足多种视频编辑需求。 格式支持广泛&#xff1a;可编辑超百种视频格式&#xff0c;基本涵盖常见和小众视频格式&#…

豆瓣图书数据采集与可视化分析(三)- 豆瓣图书数据统计分析

文章目录 前言一、数据读取与保存1. 读取清洗后数据2. 保存数据到CSV文件3. 保存数据到MySQL数据库 二、不同分类统计分析1. 不同分类的图书数量统计分析2. 不同分类的平均评分统计分析3. 不同分类的平均评价人数统计分析4. 不同分类的平均价格统计分析5. 分类综合分析 三、不同…

c++进阶——类与继承

文章目录 继承继承的基本概念继承的基本定义继承方式继承的一些注意事项 继承类模板 基类和派生类之间的转换继承中的作用域派生类的默认成员函数默认构造函数拷贝构造赋值重载析构函数默认成员函数总结 不能被继承的类继承和友元继承与静态成员多继承及其菱形继承问题继承模型…