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

解决ElementPlus对话框el-dialog中关闭事件重复触发问题

问题背景

        在使用ElementPlus的el-dialog组件时,发现点击取消按钮会触发两次关闭事件:

1. 第一次参数为PointerEvent(事件对象)

2. 第二次参数为undefined

需要确保点击取消按钮时仅触发一次有效关闭事件,并传递正确的布尔值参数。

问题分析(ElementPlus特性相关)

组件结构特征

<el-dialog
  :modelValue="visible"
  @close="handleClose"> <!-- ElementPlus内置关闭事件 -->
  <template #footer>
    <el-button @click="close">取消</el-button>
  </template>
</el-dialog>

双重触发原因

点击取消按钮:会触发close()关闭函数 → 然后触发对话框的handleClose()函数(内置的@close事件)

针对性解决方案

1. 显式传参阻断事件对象

<el-button 
  class="footer__button" 
  @click="closeBindingRole(false)"> <!-- 关键修改 -->
  取消
</el-button>

2. 统一对话框关闭处理

<el-dialog
  :modelValue="bindingRoleVisible"
  @close="handleDialogClose"> <!-- 专用关闭处理 -->
  <!-- 对话框内容 -->
</el-dialog>

<script>
// 统一关闭入口
const handleDialogClose = () => {
  closeBindingRole(false);
};
</script>

3. 增强型状态锁(ElementPlus适配版)

let dialogClosing = false;

const closeBindingRole = (isSuccess: boolean) => {
  if (dialogClosing) return;
  
  dialogClosing = true;
  emit("closeBindingRoleDialog", isSuccess);
  
  // 兼容ElementPlus动画时长
  setTimeout(() => {
    dialogClosing = false;
  }, 300); // 略大于对话框关闭动画时间
};

相关文章:

  • Android Retrofit 请求执行模块执行原理深入源码分析(三)
  • 力扣hot100二刷——链表
  • Pac-Man(吃豆人) 游戏
  • Redis 缓存数据库
  • Node.js:快速启动你的第一个Web服务器
  • 考研数学非数竞赛复习之Stolz定理求解数列极限
  • IP 地址
  • 跳表数据结构
  • 大数据学习(63)- Zookeeper详解
  • 索引-最左匹配
  • 【项目设计】基于AMQP协议实现的简单消息队列
  • android okhttp几种日志拦截级别区别
  • 数据可视化图表库LightningChart JS 全新发布v7.0——提高视觉质量
  • 7-9 抢红包
  • 从技术创新到全球布局:MOVA割草机器人以尖端科技定义智能园艺
  • 电脑一直重启怎么解决 原因及解决方法
  • PHP前后开发纪录
  • (2025|ICLR|厦大华为,LoSA,基于表示互信息的动态层级稀疏率,基于重构误差的秩分配)LLM 的动态低秩稀疏自适应
  • 【Academy】SSRF ------ Server-side request forgery
  • golang从入门到做牛马:第十八篇-Go语言递归函数:函数的“自我调用”
  • 湖北鄂城:相继4所小学有学生腹泻呕吐,供餐企业负责人已被采取强制措施
  • 荣盛发展股东所持1.17亿股将被司法拍卖,起拍价约1.788亿元
  • 外交部:中美双方并未就关税问题进行磋商或谈判
  • 4月译著联合书单|心爱之物:热爱如何联结并塑造我们
  • 三大猪企一季度同比均实现扭亏为盈,营收同比均实现增长
  • 零食连锁鸣鸣很忙递表港交所:去年营收393亿元,门店超1.4万家,净利润率2.1%