elementui中el-dialog模态与非模态的研究

el-dialog模态与非模态的研究

模式对话框就是不处理它就没法处理父窗口,而非模式对话框就是不用先处理此对话框也可以处理父窗口
在单页面应用中往往因为某个vue弹窗被打开而导致不得不处理或关闭它才能选择打开其他vue,这是将对话框设置为模态对话框所导致,模态对话框必须首先执行。
在实际操作中,对于Vue+elementui架构,其中的el-dialog默认为模态,当对话框被打开时,会出现遮罩层,使其无法操作,为了研究el-dialog是否可以设置为非模态,可以进行如下操作。

1. 设计测试页面
如图所示,左边div为非模态,右边div为模态
在这里插入图片描述
当点击显示非模态对话框时,将el-dialog中的modal设置为false,不显示遮罩层, title=“非模态框 " :visible.sync=“showNoModal” width=“30%” :modal=false :close-on-click-modal=false :modal-append-to-body=false如图所示:
在这里插入图片描述
对话框并没有在预期的位置出现,它并没有处于父级div中,并且无法点击右侧div中的按钮,可以看出此仅仅只是关闭了遮罩层,并没有对实际结果产生影响。

2. 查看网页css
通过查看该dialog的style可以看出,对话框的z-index远高于div,所以会最上层显示,所以覆盖掉了两个按钮,导致按钮点击不了,如图所示:
在这里插入图片描述
并且该dialog的父级div(编译时自建)可能为罪魁祸首,因为它的存在使左右的div处于下层并被罩住,如图所示,
在这里插入图片描述
3. 修改class
发现是一个class为el-dialog__wrapper的设置了样式,如图所示:
在这里插入图片描述
从中可以看出,dialog采用了fixed定位,也就是绝对定位,相对于浏览器窗口进行定位。元素的位置通过 “left”, “top”, “right” 以及 “bottom” 属性进行规定,所以就导致了dialog不在左侧div内。
上面样式从1开始排序,全部关闭后如图所示:
在这里插入图片描述
此时,dialog正确出现在了左侧div中,并且右侧模态按钮生效,点击后如图所示
在这里插入图片描述
在模态框中,存在class为v-modal的类,控制着遮罩层,如图所示,
在这里插入图片描述
通过重写v-modal,使遮罩层处于父级div内,如图所示:
在这里插入图片描述
4. 分析
按理说,只需要修改el-dialog__wrapper的style就可以使对话框在父级div内,并且不影响其他div进行操作。
在源码中找到此类,在theme-chalk 中找到dialog.css,如图所示,这两个便是需要修改的类,修改后发现并没有修改成功,再次查看源代码,发现dialog组件并没有用dialog.css,而是用的index.css,随后修改此文件
在这里插入图片描述
将el-dialog__wrapper改为
{position: absolute;top: 0;left: 0;bottom: 0;right: 0;margin: auto;}
使对话框在父级元素中垂直居中显示。
效果如图所示:
在这里插入图片描述
可以看到对话框只显示在父元素内,不影响其他页面元素的使用
5. 存在的问题
1) 由于对话框设置了在父级div中显示,所以对话框的大小大大缩小,导致有一些数据不能全部显示
2) 遮罩层如果只在父级元素内遮罩,美观效果大大折扣
3) 对话框还是无法进行拖拽

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
引用提到了el-dialogelement-ui的一个组件,它可以用来创建模态对话框。模态对话框是指在打开对话框时,会出现遮罩层,使其无法操作其他内容。el-dialog默认是模态的,即打开对话框时会出现遮罩层,而且必须首先处理对话框才能处理其他内容。 引用提到了如何将el-dialog设置为模态,并增加拖拽功能。通过自定义指令,可以给el-dialog添加v-draggable属性,使其变为可拖拽的弹框。具体实现可参考代码的directive.js和main.js文件。 引用提到了修改el-dialog样式的方法,通过修改el-dialog__wrapper的样式,可以使对话框在父级div内显示,并不影响其他div的操作。通过修改index.css文件el-dialog__wrapper的样式,可以使对话框在父级元素垂直居显示。 总结起来,el-dialogelement-ui的一个组件,可以用来创建模态对话框。如果需要将其设置为模态并增加拖拽功能,可以通过自定义指令来实现。同时,可以通过修改样式文件来控制对话框的显示位置和样式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [elementuiel-dialog模态与非模态研究](https://blog.csdn.net/qq_39163732/article/details/112529653)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [vue el-dialog 模态框拖拽](https://blog.csdn.net/qq_36410795/article/details/124424060)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值