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

解决Ant Design Vue使用Modal对话框无法关闭的问题《操作Dom不需要降低版本》

一、问题
Ant Design Vue 使用 Modal.confirm 之类的静态方法 发现无法关闭弹窗,网上搜了好多都是降低版本,并锁定版本,但是目前在做的项目对UI样式要求很高,降低或者升级版本会导致部分样式不符合当前的UI规范,于是通过操作Dom的方式解决。

二、解决方法

// 静态方法打开 Modal 弹窗
Modal.confirm({
        title:  'This is a success message',
        icon: createVNode(InfoCircleFilled),
        content: 'some messages...some messages...',
        okText: 'yes',
        cancelText: 'no',
        onOk() {
        // 操作dom的函数 用于关闭弹窗
          closeMyFn()
          console.log('onOk');
        },
        onCancel() {
          closeMyFn()
          console.log('onCancel');
        },
      });
     timer.value = setTimeout(()=> {
     // 打开弹窗时给右上角的 X 绑定点击事件
       clickX()
    },200)

// 关闭弹窗
const closeMyFn= async () => {
  let dom = document.getElementsByClassName('ems-front-modal-body')[0]
  let domRoot = document.getElementsByClassName('ems-front-modal-root')[0]
  dom.remove()
  domRoot.remove()
}

// 点击 Modal 右上角的 X
const clickX = async ()=> {
  modalXDom.value = document.getElementsByClassName('ems-front-modal-close')[0]
  modalXDom.value.addEventListener('click',()=>{
    // 点击右上角的 X 调用关闭弹窗的方法
    closeMyFn()
  })
}

// 卸载的时候清空定时器和绑定的点击事件
onUnmounted(() => {
  modalXDom.value && modalCloseDom.value.removeEventListener('click', () => {})
  timer.value && clearTimeout(timer.value)
})

三、注意
如果一个页面既有 Modal.confirm (静态方法点击的弹窗) 又有 < a-modal >类的弹窗需改给 < a-modal > 加 v-if 例如

<a-modal
    v-if="visible"
    v-model:visible="visible"
    title="标题"
    @ok="handleOk"
  >
</a-modal>

http://www.kler.cn/a/310535.html

相关文章:

  • 【Linux篇】面试——用户和组、文件类型、权限、进程
  • 【机器学习】机器学习中用到的高等数学知识-3.微积分 (Calculus)
  • 力扣 LeetCode 27. 移除元素(Day1:数组)
  • 准确--FastDFS快速单节点部署
  • Python酷库之旅-第三方库Pandas(206)
  • 如何在 CentOS 6 上设置 NFS 挂载
  • PostgreSQL的流复制断点续传
  • 选址模型 | 基于混沌模拟退火粒子群优化算法的电动汽车充电站选址与定容(Matlab)
  • linux的redir命令实现端口转发
  • Java研发笔记2——C语言程序设计学习笔记1
  • 封装svg图片
  • fiddler抓包01:工具介绍
  • Oracle 数据库部署与实施
  • 三维天地创新方案助力实验室信息自动化技术深入发展
  • 【裸机装机系列】7.kali(ubuntu)-安装开发所需工具
  • Spring考点总结
  • 软件工程测试
  • 新提案:C++将变得内存安全
  • OpenMV与STM32之间的通信
  • Redis集群_哨兵模式
  • Tuxera NTFS for Mac 2023绿色版
  • LVM硬盘挂载
  • MySQL:bin log
  • Centos中关闭swap分区,关闭内存交换
  • python本地进程通讯----共享内存变量
  • 001、Git开发流程规范