Vue 和 Element Plus 弹框组件详解:从基本实现到异步数据加载与自定义内容(实战)

目录

  • 前言
  • 1. 基本知识
  • 2. 模版
  • 3. 实战

前言

主要是通过一个按钮触发一个按钮框,多种方式的逻辑,多种场景

原先通过实战总结,基本的知识推荐阅读:

  1. 详细分析Element Plus中的ElMessageBox弹窗用法(附Demo及模版)
  2. 详细分析Element中的MessageBox基本知识(附Demo)
  3. Vue按照顺序实现多级弹窗(附Demo)
  4. Vue以弹窗形式实现导入功能
  5. 使用 Vue 实现包含单选框的弹窗功能(附Demo)
  6. 点击按钮框来选择相应信息(Vue + Java)

此处整体文章偏向vue3的语法, 对于vu2大同小异,注意语法差异即可

1. 基本知识

展示弹框内容并控制其显示是 Vue 和 Element Plus 中常见的需求

弹框组件 (el-dialog):
el-dialog 是 Element Plus 提供的对话框组件,用于弹出层展示信息
使用 v-model 或 v-model:visible 来控制对话框的显示和隐藏
可以通过插槽自定义对话框的内容和底部按钮

Vue 组件通信:
Props:父组件向子组件传递数据
Emits:子组件向父组件传递事件或数据
v-model:用于双向绑定数据

方法:

使用异步方法(async/await)获取数据
更新组件状态(如弹框的显示状态)以展示或隐藏内容

2. 模版

参照模版感受对应的需求

在最基本的实现中,可以使用 el-dialog 组件并通过 v-model 控制其显示和隐藏

  1. 组件代码 (BasicDialog.vue)
<template><div><el-button type="primary" @click="showDialog">打开对话框</el-button><el-dialogv-model:visible="dialogVisible"title="基本对话框"width="50%"><p>这是一个基本的对话框。</p><template #footer><el-button @click="dialogVisible = false">关闭</el-button></template></el-dialog></div>
</template><script setup>
import { ref } from 'vue';const dialogVisible = ref(false);const showDialog = () => {dialogVisible.value = true;
};
</script>
  1. 传递数据到对话框
<template><div><el-button type="primary" @click="showDataDialog">查看数据</el-button><el-dialogv-model:visible="dataDialogVisible"title="数据对话框"width="50%"><p>{{ dialogContent }}</p><template #footer><el-button @click="dataDialogVisible = false">关闭</el-button></template></el-dialog></div>
</template><script setup>
import { ref } from 'vue';const dataDialogVisible = ref(false);
const dialogContent = ref('这是传递的数据内容');const showDataDialog = () => {dataDialogVisible.value = true;
};
</script>
  1. 异步数据加载

通过按钮点击触发对话框显示,并从后端获取数据并显示

<template><div><el-button type="primary" @click="fetchDataAndShowDialog">获取数据并显示</el-button><el-dialogv-model:visible="asyncDialogVisible"title="异步数据对话框"width="50%"><p>{{ asyncData }}</p><template #footer><el-button @click="asyncDialogVisible = false">关闭</el-button></template></el-dialog></div>
</template><script setup>
import { ref } from 'vue';
import AppointmentCommissionApi from '@/api/AppointmentCommissionApi'; // 替换为实际路径const asyncDialogVisible = ref(false);
const asyncData = ref('');const fetchDataAndShowDialog = async () => {try {const response = await AppointmentCommissionApi.getData();asyncData.value = response.data; // 假设返回的数据在 data 字段中asyncDialogVisible.value = true;} catch (error) {console.error('数据获取失败:', error);}
};
</script>
  1. 自定义对话框内容
    可以通过插槽 (slot) 自定义对话框内容,如自定义表单或详细信息展示
<template><div><el-button type="primary" @click="showCustomDialog">打开自定义对话框</el-button><el-dialogv-model:visible="customDialogVisible"title="自定义内容对话框"width="50%"><template #default><el-form :model="form"><el-form-item label="名称"><el-input v-model="form.name"></el-input></el-form-item><el-form-item label="描述"><el-input type="textarea" v-model="form.description"></el-input></el-form-item></el-form></template><template #footer><el-button @click="customDialogVisible = false">取消</el-button><el-button type="primary" @click="handleSubmit">提交</el-button></template></el-dialog></div>
</template><script setup>
import { ref } from 'vue';const customDialogVisible = ref(false);
const form = ref({name: '',description: ''
});const showCustomDialog = () => {customDialogVisible.value = true;
};const handleSubmit = () => {console.log('提交的表单数据:', form.value);customDialogVisible.value = false;
};
</script>

3. 实战

通过基本的知识点以及Demo模版大致知道逻辑步骤

在做审批过程中,审批不通过,客户查询后端原因,出现弹框结果

在这里插入图片描述

基本的功能组件如下:

<template><el-dialog :model-value="visible" title="不通过原因" width="50%" @close="handleClose"><p>{{ rejectionReason }}</p><template #footer><el-button @click="handleClose">关闭</el-button></template></el-dialog>
</template><script setup lang="ts">
import { ref, defineProps, defineEmits, watch } from 'vue';const props = defineProps({modelValue: {type: Boolean,required: true},rejectionReason: {type: String,default: ''}
});const emit = defineEmits(['update:modelValue']);const visible = ref(props.modelValue);watch(() => props.modelValue, (newVal) => {visible.value = newVal;
});const handleClose = () => {emit('update:modelValue', false);
};
</script>

在父组件中使用 RejectionReasonDialog,并进行相应的弹框控制和数据处理

<template><div><!-- 查看不通过原因按钮 --><el-buttonlinktype="primary"@click="showRejectionReason(scope.row.id)"v-if="scope.row.appointmentStatus === '审批不通过'"v-hasPermi="['dangerous:appointment-commission:query']">查看原因</el-button><!-- 不通过原因对话框 --><RejectionReasonDialogv-model:modelValue="isReasonDialogVisible":rejectionReason="rejectionReason"/></div>
</template><script setup lang="ts">
import { ref } from 'vue';
import AppointmentCommissionApi from '@/api/AppointmentCommissionApi'; // 替换为实际路径
import RejectionReasonDialog from '@/components/RejectionReasonDialog.vue'; // 替换为实际路径const isReasonDialogVisible = ref(false);
const rejectionReason = ref('');const showRejectionReason = async (id: number) => {try {const response = await AppointmentCommissionApi.getAppointmentCommission(id);rejectionReason.value = response.approvalReason || '无理由'; // 确保有默认值isReasonDialogVisible.value = true; // 显示对话框} catch (error) {console.error('获取不通过原因失败:', error);}
};
</script>

基本的解释如下:

  • RejectionReasonDialog 组件
    使用 :model-value="visible" 绑定控制对话框的显示
    使用 rejectionReason 作为对话框内容

  • 父组件
    通过 showRejectionReason 方法调用 API 并更新 rejectionReason
    通过 isReasonDialogVisible 控制对话框的显示

  • 数据绑定
    v-model:modelValue 用于双向绑定对话框的显示状态
    :rejectionReason 传递不通过原因到对话框组件

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

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

相关文章

秋招复习笔记——嵌入式裸机开发

底层相关的内容&#xff0c;之前掌握的不扎实&#xff0c;现在重新把相关重点记录一下&#xff0c;做个笔记记诵。 相关基础知识 ST简单内容 用的F103ZET6&#xff0c;72MHz&#xff0c;FLASH是512KB&#xff0c;SRAM是64KB&#xff0c;144个引脚&#xff0c;2基本定时器&am…

目标 CDC实例数据库更改密码,预定启动报错SQL 错误代码为“-30082”。SQL 状态为:08001。

更改完CDC目标端实例密码后&#xff0c;登录MC更新存储器密码&#xff0c;存储器可正常连接&#xff0c;启动预定报错如下&#xff1a; 源 IBM Data Replication 未获授权&#xff0c;无法复制到该目标。 登录认证失败。 发生 SQL 异常。SQL 错误代码为“-30082”。SQL 状态…

嵌入式学习——ARM学习(1)

1、存储器 高速缓存&#xff08;Cache&#xff09;通常分为三级&#xff1a;L1、L2 和 L3。它们的主要功能和特点如下&#xff1a; 这三级缓存的设计旨在通过层次化存储来优化数据访问速度和处理器性能。 1、L1 缓存&#xff1a; 位置&#xff1a;直接集成在处理器核心内。 大小…

打手机检测算法源码样本展示打手机检测算法实际应用场景介绍

打手机检测算法是一种利用计算机视觉技术来监测和识别人们在特定区域如驾驶舱、考场或其他敏感区域非法使用手机的行为。这种算法对于提高安全性和确保规则的遵守具有重要意义。以下是关于打手机检测算法源码及其实际应用的详细阐述&#xff1a; 1. 算法实现 - 深度学习框架&a…

【selenium点选下拉框】解决无法选中对应选项的问题

需求 使用selenium点击下拉框&#xff0c;选中【是】选项。 代码 方法1 # 点击下拉框 driver.find_element(xpath,//*[id"basicProcessDetail"]/div[2]/div[2]/div[1]/div/div[2]/div/div/div/div[1]/div[2]/form/div[11]/div[1]/div/div/div[1]/div[1]/div/i).…

雷达图概述以及实例

目录 一.雷达图概述1.何为雷达图2.雷达图的构成要素 二.实例&#xff08;以Excel、Python为例 &#xff09;1.Excel&#xff08;2021版&#xff09;2.Python 一.雷达图概述 1.何为雷达图 雷达图&#xff0c;是一种展现多维度数据间相对重要性或程度的可视化图形。以中心点为起…

LabVIEW高速数据采集关键问题

在LabVIEW进行高速数据采集时&#xff0c;需要关注以下几个关键问题&#xff1a; 数据采集硬件的选择: 高速数据采集需要高性能的数据采集硬件&#xff0c;例如NI PXIe、USB DAQ等模块。硬件的选择应根据采集速率、通道数、精度、以及应用场景的具体需求来确定。 采集速率与带…

ByteBuffer详解

文章目录 1. ByteBuffer是抽象类&#xff0c;他的主要实现类为2. 获取方式3. 核心结构4. 核心API5. 字符串操作 1. ByteBuffer是抽象类&#xff0c;他的主要实现类为 HeapByteBuffer 堆ByteBuffer JVM内的堆内存 —> 读写操作 效率低 会受到GC影响MappedByteBuffer(DirectB…

桥接模式-多类型登录方式的思考

桥接模式-SSO单点登录 背景:(业务细节已脱敏)需求:问题:解决方式: OAuth2.0 实现单点登录四种授权模式桥接模式优化问题代码实现 背景:(业务细节已脱敏) 基于实习期间的一个代码重构的思考——业务细节已脱敏 基于内部旧框架实现业务toB管理系统&#xff0c;需要迁移数据并新的…

uni-app 手记集。

1、uni-app 是一个使用 Vue.js 开发的前端应用的框架&#xff0c;所以不会Vue.js的小伙伴可以先去看看Vue.js的基础教学。 2、.vue文件结构 <template><div class"container"></div> </template><script type"text/ecmascript-6&q…

【DiskGenius硬盘分区】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

TCP系列相关内容

一、TCP上传文件 loop——本地回环测试地址。 void *memset&#xff08;void *s,int c,size_t n&#xff09;——给一个变量设定一个值。 1、“粘包”问题 两次分别发送的数据&#xff0c;被一起接收形成该现象。 原因&#xff1a;TCP流式套接字&#xff0c;数据与数据间没…

前端速通面经八股系列(二)—— HTML篇

HTML高频面经八股目录 1. src和href的区别2. 对HTML语义化的理解3. DOCTYPE(⽂档类型) 的作⽤4. script标签中defer和async的区别5. 常⽤的meta标签有哪些6. HTML5有哪些更新1. 语义化标签2. 媒体标签3. 表单4. 进度条、度量器5.DOM查询操作6. Web存储7. 其他 7. img的srcset属…

三种通过代码创建矢量文件的方法及例子

现有四个点&#xff1a;(1, 1), (2, 2), (3, 3), (4, 4) 以这四个点围起来就是一个面。 如何通过python创建矢量文件。 我们以创建一个面矢量文件为例子&#xff0c;进行阐释。 我们可以使用geopandas、fiona、gdal库完成矢量创建。 geopandas 假设我们创建的矢量文件格式…

Chrome H265 WebRTC 支持

Chrome从127版本开始支持RTC H265解码&#xff0c;这样服务器就不需要对H265转码了&#xff0c; H5S和USC会自动检测浏览器支持的解码类型并自动判断是否启动转码&#xff0c;这样客户端不用关心摄像机具体是H264还是H265&#xff0c;尽量使用带GPU的客户端&#xff0c;这样服务…

ArcGIS应用指南:近邻分析(点匹配到最近线段上)

近邻分析通常用于确定一个要素集中的要素与另一个要素集中最近要素的距离。当涉及到点匹配到最近的线时&#xff0c;这种分析可以用来确定每个点到最近线段的距离及位置&#xff0c;也就是我们常说的点匹配到最近线上&#xff0c;可以参考官方文档&#xff1a;近邻分析 (Covera…

动态规划之买卖股票篇-代码随想录算法训练营第三十八天| 买卖股票的最佳时机ⅠⅡⅢⅣ,309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费

121. 买卖股票的最佳时机 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 讲解视频&#xff1a; 动态规划之 LeetCode&#xff1a;121.买卖股票的最佳时机1 题目描述&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定…

软件测试-Selenium+python自动化测试

目录 一、元素定位 1.1一个简单的模板 1.2单选框radio定位实战 1.3下拉操作 1.4弹窗 1.5文件上传 1.6 iframe(类似于页中页,嵌套进去了) 二、元素定位实战 会用到谷歌浏览器Chrome测试,需要下载一个Chromedriver(Chrome for Testing availability)对应自己的浏览…

华为2024 届秋招招聘——硬件技术工程师-电源方向-机试题(四套)(每套四十题)

华为 2024 届秋招——硬件-电源机试题&#xff08;四套&#xff09;&#xff08;每套四十题&#xff09; 岗位——硬件技术工程师 岗位意向——电源 真题题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&am…

OpenCV杂项图像变换(1)自适应阈值处理函数adaptiveThreshold()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 函数对数组应用自适应阈值。 该函数根据以下公式将灰度图像转换为二值图像&#xff1a; 对于 THRESH_BINARY: t e x t d s t ( x , y ) { maxV…