当前位置: 首页 > news >正文

Vue3 Element Plus 对话框加载实现

在 Vue3 + Element Plus 中实现对话框加载效果,可以通过以下两种方式实现:

方式一:使用 v-loading 指令(推荐)

vue

复制

下载

<template><el-button @click="openDialog">打开对话框</el-button><el-dialogv-model="dialogVisible"title="加载中对话框"@open="handleOpen"><!-- 使用 v-loading 指令 --><div v-loading="isLoading" style="min-height: 150px"><div v-if="!isLoading"><!-- 你的实际内容 -->加载完成的内容...</div></div></el-dialog>
</template><script setup>
import { ref } from 'vue';const dialogVisible = ref(false);
const isLoading = ref(false);const openDialog = () => {dialogVisible.value = true;
};const handleOpen = async () => {isLoading.value = true;try {// 模拟异步请求await new Promise(resolve => setTimeout(resolve, 2000));// 这里可以放置你的真实请求} finally {isLoading.value = false;}
};
</script>

方式二:使用 ElLoading 服务(局部加载)

vue

复制

下载

<template><el-button @click="openDialog">打开对话框</el-button><el-dialogv-model="dialogVisible"title="加载中对话框"@open="handleOpen"><div ref="dialogContent" style="min-height: 150px"><!-- 你的实际内容 --><div v-if="data">{{ data }}</div></div></el-dialog>
</template><script setup>
import { ref } from 'vue';
import { ElLoading } from 'element-plus';const dialogVisible = ref(false);
const dialogContent = ref(null);
const data = ref(null);const openDialog = () => {dialogVisible.value = true;
};const handleOpen = async () => {// 创建加载实例const loadingInstance = ElLoading.service({target: dialogContent.value,text: '拼命加载中...',background: 'rgba(255, 255, 255, 0.5)'});try {// 模拟异步请求await new Promise(resolve => setTimeout(resolve, 2000));data.value = '加载完成的内容...';} finally {// 关闭加载loadingInstance.close();}
};
</script>

两种方式对比:

  1. v-loading 指令

    • 更简单直接

    • 内置加载动画和样式

    • 自动处理 DOM 容器

  2. ElLoading 服务

    • 更灵活,可以自定义加载文本和背景

    • 需要手动管理加载实例

    • 需要指定具体加载容器

优化建议:

  • 在 finally 块中关闭加载状态,确保异常情况下也能关闭加载

  • 可以为加载状态添加文字提示:v-loading="isLoading" element-loading-text="正在拼命加载..."

  • 如果内容高度不确定,建议设置最小高度避免布局抖动

  • 对于表单场景,可以在提交时使用类似方法防止重复提交

http://www.xdnf.cn/news/494137.html

相关文章:

  • TensorRT10系列的api使用以及部署案例
  • jvm安全点(一)openjdk17 c++源码垃圾回收安全点信号函数处理线程阻塞
  • python四则运算计算器
  • Windows 上安装下载并配置 Apache Maven
  • JVM 机制
  • 学习笔记(C++篇)—— Day 6
  • 十二、Hive 函数
  • 数据湖与数据仓库融合:Hudi、Iceberg、Delta Lake 实践对比
  • JavaScript入门【3】面向对象
  • Bellman - Ford 算法与 SPFA 算法求解最短路径问题 ——从零开始的图论讲解(4)
  • Predict Podcast Listening Time-(回归+特征工程+xgb)
  • Git合并多个提交方法详解
  • C 语言学习笔记(数组)
  • WL-G4048 Multi-Port PCIe 4.0 Switch
  • AI最新资讯,GPT4.1加入网页端、Claude 3.7 Sonnet携“极限推理”发布在即
  • 解决将其他盘可用空间,移植到C盘
  • 2025第三届盘古石杯初赛(计算机部分)
  • 直接从图片生成 html
  • 传统轮椅逆袭!RDK + 激光雷达如何重塑出行体验?
  • TII-2024《AGP-Net: Adaptive Graph Prior Network for Image Denoising》
  • C/C++——动态爱心
  • 信贷风控笔记5——风控贷中策略笔记(面试准备13)
  • 【匹配】Hirschberg
  • Baklib加速企业AI数据智理转型
  • 前台页面卡顿,如何去排查问题
  • 【源码级开发】Qwen3接入MCP,企业级智能体开发实战!
  • 软考第七章知识点总结
  • 力扣-39.组合总和
  • 开源情报如何成为信息攻防的关键资源
  • 科技型中小企业基本条件及与高新技术企业的区别