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

问题背景

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

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

  2. 第二次参数为undefined

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

问题分析(ElementPlus特性相关)

组件结构特征

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

双重触发原因

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

针对性解决方案

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

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

2. 统一对话框关闭处理

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

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

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

javascript 复制代码
let dialogClosing = false;

const closeBindingRole = (isSuccess: boolean) => {
  if (dialogClosing) return;
  
  dialogClosing = true;
  emit("closeBindingRoleDialog", isSuccess);
  
  // 兼容ElementPlus动画时长
  setTimeout(() => {
    dialogClosing = false;
  }, 300); // 略大于对话框关闭动画时间
};
相关推荐
爱怪笑的小杰杰几秒前
Leaflet 高性能大数据量图圆:彻底解决缩放/拖拽偏移问题
大数据·前端·vue.js·贴图
WL_Aurora10 分钟前
大数据技术之SparkCore
大数据·前端·spark·rdd
失眠的咕噜39 分钟前
PDA 安卓设备上传多张图片
android·前端·javascript
贵州数擎科技有限公司1 小时前
霓虹沙尘暴的 Three.js 实现
前端·webgl
一只叁木Meow1 小时前
电商 SKU 选择器:用算法实现优雅的用户交互
前端·javascript·算法
笔优站长1 小时前
vue-sign-canvas v2 重构复盘:从 Vue 2 签名板到 Vue 3 + TypeScript 组件库
前端·vue.js
Aolith1 小时前
事件驱动设计:我如何为校园论坛实现消息通知功能
前端·vue.js
代码煮茶1 小时前
Vue3 Mock 数据实战 | 用 Mockjs + vite-plugin-mock 搭建前端独立开发环境
javascript·vue.js
yingyima1 小时前
GitHub Actions 定时任务 schedule 踩坑实录:核心语法与实战技巧
前端
代码煮茶1 小时前
CSS 单位完全指南:px、em、rem、vw、vh、clamp 详解
前端·css