
elementUi中的popover嵌套导致弹窗不能自动关闭
发布日期:2021-05-14 14:31:47
浏览次数:17
分类:精选文章
本文共 1266 字,大约阅读时间需要 4 分钟。
在Vue.js项目中,遇到嵌套弹窗(popover)的显示与关闭问题时,尤其是父级和子级弹窗无法协调关闭的情况,这可能是由于弹窗层级混淆导致的。以下是解决这个问题的详细方法。
1. 给嵌套的弹窗添加唯一引用
由于子级弹窗是动态生成的,因此可以在父级弹窗中为每个子级弹窗添加唯一的ref。这样在控制子级弹窗时,可以通过引用来区分不同层级的弹窗。
// 假设SubComponent中有一个el-popover循环生成
2. 传递索引参数来控制弹窗关闭
在显示子级弹窗时,可以通过回调传递索引参数,以便在关闭时确定是哪个弹窗需要关闭。
// 父级弹窗的显示回调中添加索引showPopover(index) { // 当前显示的子级弹窗索引 this.$root.currentIndex = index;}
3. 在点击事件中关闭所有弹窗
为确保在点击其他区域时,所有弹窗都会关闭,可以在点击事件中调用doClose
方法,并传递索引以控制具体弹窗的关闭。
// 定义点击事件处理函数tableTwoPopoverClick() { // 获取所有弹窗引用 let eleList = this.$refs.earlyPop; let eleList1 = this.$refs.warnyPop; // 调用每个弹窗的doClose方法 eleList.forEach((i, j) => { if (j === this.$root.currentIndex) { i.doClose(); } else { i.doClose(); } }); eleList1.forEach((i, j) => { if (j === this.$root.currentIndex) { i.doClose(); } else { i.doClose(); } });}
4. 在页面最外层添加点击事件
为了在点击页面外部区域时关闭当前显示的弹窗,可以在页面的最外层div中添加点击事件,并设置事件冒泡为 STOP。
// 定义事件处理函数handleClick() { this.$root.currentIndex = null;}
5. 防止事件冒泡干扰
在关闭弹窗时,为避免影响其他层级的弹窗显示,确保事件冒泡被停止。
doClose() { //ypassThroughEvents var e = window.event || arguments.callee.caller.arguments[0]; e.stopPropagation();}
总结
通过以上方法,可以有效地控制嵌套弹窗的显示和关闭,确保父级弹窗在子级弹窗显示时不会自动关闭,点击外部区域时弹窗能够正确关闭,并且避免事件冒泡影响用户体验。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月14日 19时49分40秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Think PHP 学习笔记 10.查询方式实例演示
2019-03-11
JS 瀑布流效果
2019-03-11
单选框点击文字也能选中
2019-03-11
使用Field II进行超声波束形成的设计仿真
2019-03-11
制作声场GIF动画
2019-03-11
此主机支持Intel VT-x,但Intel VT-x 处于禁用状态。
2019-03-11
golang reflect实例
2019-03-11
IDEA让代码飞起来,IDEA快捷键
2019-03-11
微信小程序学习记录之WXML事件
2019-03-11
zabbix监控安装
2019-03-11
06-局部变量和全局变量
2019-03-11
12-面向对象1
2019-03-11
python 进程 线程 协程(通信方式)
2019-03-11
python基础总结 异常处理
2019-03-11
Python类和函数(私有变量、私有方法、变量作用域、继承和多态)
2019-03-11
【5G之道】第一章:介绍
2019-03-11
解决Vue源码运行错误
2019-03-11
HDU - 4109 Instrction Arrangement
2019-03-11
服务器响应json字符串采用拼接的方式响应时要注意的坑!
2019-03-11