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

如何在 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.mzph.cn/bicheng/78014.shtml

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

相关文章

动态加载内容时selenium如何操作?

当处理动态加载的内容时&#xff0c;Selenium 是一个非常强大的工具&#xff0c;因为它可以模拟真实用户的浏览器行为&#xff0c;等待页面元素加载完成后再进行操作。以下是使用 Selenium 获取动态加载内容的详细步骤和代码示例。 一、安装 Selenium 和 ChromeDriver &#…

力扣第446场周赛

有事没赶上, 赛后模拟了一下, 分享一下我的解题思路和做题感受 1.执行指令后的得分 题目链接如下&#xff1a;力扣 给你两个数组&#xff1a;instructions 和 values&#xff0c;数组的长度均为 n。 你需要根据以下规则模拟一个过程&#xff1a; 从下标 i 0 的第一个指令开…

三维点拟合平面ransac c++

理论 平面的一般定义 在三维空间中&#xff0c;一个平面可以由两个要素唯一确定&#xff1a; 法向量 n(a,b,c)&#xff1a;垂直于平面的方向 平面上一点 平面上任意一点 p(x,y,z) 满足&#xff1a; ( p − p 0 ) ∗ n 0 (p - p0) * n 0 (p−p0)∗n0 即 a ( x − x 0 ) …

基于LSTM-AutoEncoder的心电信号时间序列数据异常检测(PyTorch版)

心电信号&#xff08;ECG&#xff09;的异常检测对心血管疾病早期预警至关重要&#xff0c;但传统方法面临时序依赖建模不足与噪声敏感等问题。本文使用一种基于LSTM-AutoEncoder的深度时序异常检测框架&#xff0c;通过编码器-解码器结构捕捉心电信号的长期时空依赖特征&#…

Docker 部署 PostgreSQL 数据库

Docker 部署 PostgreSQL 数据库 基于 Docker 部署 PostgreSQL 数据库一、拉取 PostgreSQL 镜像二、运行 PostgreSQL 容器三、运行命令参数详解四、查看容器运行状态 基于 Docker 部署 PostgreSQL 数据库 一、拉取 PostgreSQL 镜像 首先&#xff0c;确保你的 Docker 环境已正确…

MySQL性能调优(四):MySQL的执行原理(MYSQL的查询成本)

文章目录 MySQL性能调优数据库设计优化查询优化配置参数调整硬件优化 1.MySQL的执行原理-21.1.MySQL的查询成本1.1.1.什么是成本1.1.2.单表查询的成本1.1.2.1.基于成本的优化步骤实战1. 根据搜索条件&#xff0c;找出所有可能使用的索引2. 计算全表扫描的代价3. 计算使用不同索…

用 Go 优雅地清理 HTML 并抵御 XSS——Bluemonday

1、背景与动机 只要你的服务接收并回显用户生成内容&#xff08;UGC&#xff09;——论坛帖子、评论、富文本邮件正文、Markdown 等——就必须考虑 XSS&#xff08;Cross‑Site Scripting&#xff09;攻击风险。浏览器在解析 HTML 时会执行脚本&#xff1b;如果不做清理&#…

Redis SCAN 命令的详细介绍

Redis SCAN 命令的详细介绍 以下是 Redis SCAN​ 命令的详细介绍&#xff0c;结合其核心特性、使用场景及底层原理进行综合说明&#xff1a; 工作原理图 &#xff1a; ​ 一、核心特性 非阻塞式迭代 通过游标&#xff08;Cursor&#xff09; 分批次遍历键&#xff0c;避免一次…

SpringBoot3集成MyBatis-Plus(解决Boot2升级Boot3)

总结&#xff1a;目前升级仅发现依赖有变更&#xff0c;其他目前未发现&#xff0c;如有发现&#xff0c;后续会继续更新 由于项目架构提升&#xff0c;以前开发的很多公共的组件&#xff0c;以及配置都需要升级&#xff0c;因此记录需要更改的配置&#xff08;记录时间&#…

基于mybatis与PageHelper插件实现条件分页查询(3.19)

实现商品分页例子 需要先引入mybatis与pagehelper插件&#xff0c;在pom.xml里 <!-- Mybatis --> <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3&l…

Spring Bean 全方位指南:从作用域、生命周期到自动配置详解

目录 1. Bean 的作用域 1.1 singleton 1.2 prototype 1.3 request 1.4 session 1.5 application 1.5.1 servletContext 和 applicationContext 区别 2. Bean 的生命周期 2.1 详解初始化 2.1.1 Aware 接口回调 2.1.2 执行初始化方法 2.2 代码示例 2.3 源码 [面试题…

C++ (非类型参数)

模板除了定义类型参数之外&#xff0c;也可以在模板内定义非类型参数 非类型参数不是类型&#xff0c;而是值&#xff0c;比如&#xff1a;指针&#xff0c;整数&#xff0c;引用 非类型参数的用法&#xff1a; 1.整数常量&#xff1a;非类型参数最常见的形式是整数常量&…

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

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

5.QT-常用控件-QWidget|enabled|geometry|window frame(C++)

控件概述 实现图形化界面的程序. Qt中已经给我们提供了很多的“控件" 就需要学习和了解这些控件&#xff0c;学会如何使用这些控件 编程讲究的是“站在巨人的肩膀上”&#xff0c;而不是“从头发明轮子" 一个图形化界面上的内容&#xff0c;不需要咱们全都从零去实…

2025-04-22| Docker: --privileged参数详解

在 Docker 中&#xff0c;--privileged 是一个运行容器时的标志&#xff0c;它赋予容器特权模式&#xff0c;大幅提升容器对宿主机资源的访问权限。以下是 --privileged 的作用和相关细节&#xff1a; 作用 完全访问宿主机的设备&#xff1a; 容器可以访问宿主机的所有设备&am…

高性能服务器配置经验指南1——刚配置好服务器应该做哪些事

文章目录 安装ubuntu安装必要软件设置用户远程连接安全问题ClamAV安装教程步骤 1&#xff1a;更新系统软件源步骤 2&#xff1a;升级系统&#xff08;可选但推荐&#xff09;步骤 3&#xff1a;安装 ClamAV步骤 4&#xff1a;更新病毒库步骤 5&#xff1a;验证安装ClamAV 常用命…

直流绝缘监测解决方案:保障工业与新能源系统的安全运行

一、引言 随着工业自动化和新能源技术的快速发展&#xff0c;直流供电系统在光伏发电、储能电站、电动汽车充电桩等领域的应用日益广泛。然而&#xff0c;直流系统的正负极不接地&#xff08;IT系统&#xff09;特性&#xff0c;使得绝缘故障可能导致漏电、短路甚至设备损毁等…

VSCode 用于JAVA开发的环境配置,JDK为1.8版本时的配置

插件安装 JAVA开发在VSCode中&#xff0c;需要安装JAVA的必要开发。当前安装只需要安装 “Language Support for Java(TM) by Red Hat”插件即可 安装此插件后&#xff0c;会自动安装包含如下插件&#xff0c;不再需要单独安装 Project Manager for Java Test Runner for J…

C++入门语法

C入门 首先第一点&#xff0c;C中可以混用C语言中的语法。但是C语言是不兼容C的。C主要是为了改进C语言而创建的一门语言&#xff0c;就是有人用C语言用不爽了&#xff0c;改出来个C。 命名空间 c语言中会有如下这样的问题&#xff1a; 那么C为了解决这个问题就整出了一个命名…

输入框仅支持英文、特殊符号、全角自动转半角 vue3

需求&#xff1a;封装一个输入框组件 1.只能输入英文。 2.输入的小写英文自动转大写。 3.输入的全角特殊符号自动转半角特殊字符 效果图 代码 <script setup> import { defineEmits, defineModel, defineProps } from "vue"; import { debounce } from "…