elementUI中dialog踩坑(首次渲染问题)

经常使用vue的同学对element-ui的弹框组件应该都不陌生,element为了优化性能,在弹框未首次打开之前,是会不渲染弹框body中的内容的,一般情况下这样的设定是没有问题的,弹框未打开时我们一般也是不需要对弹框内容做操作的,但是在一些特殊情况,可能就有问题了

弹框中使用其他组件,或者获取dom元素

让我们继续翻看el-dialog的源码:

 

 

可以看到body部分的渲染是通过​rendered​参数来控制的,

rendered是el-dialog中的内部参数,在首次打开之后,el-dialog将rendered置为true,之后body内容就开始渲染。

解决问题:

1.方式一

知道el-dialog的代码实现之后,我们想解决这个问题就非常简单了,只要让rendered参数在未打开时就值为true,虽然rendered是内部参数,不暴露api,但是我们可以通过弹框实例直接修改他

 直接在我们的mounted事件中调用dialog实例,将rendered置为true,此时body内容就可以开始渲染了

2.方式二

通过以上的处理,基本满足我们的需求了,但是可不可以更进一步呢,比如有多处需要类似需求,那我们需要在业务逻辑中每次都写一个处理,非常不方便,同时处理需要在mounted事件中,否则拿不到弹框实例,而弹框实例挂载也是需要时间的(尽管时间非常快),所以我们最好可以封装一个直接做一个独立的组件使用。

正好vue就提供了这样的api,让我们可以非常方便的扩展组件。

 利用extends我们可以保留组件来源的全部功能,只需加上我们需要的逻辑就行了

<script>
import { Dialog } from "element-ui";
export default {
  extends: Dialog,
  props: {
    preload: {
      type: Boolean,
      default: false,
    },
  },
  created() {
    this.preload && (this.rendered = true);
  },
};
</script>

通过简单的扩展,我们就可以直接使用preload参数开控制弹框是否需要预渲染了

3.方式三

获取更新的dom,进行dom的相关操作

利用this.$nextTick(()=>{}) 等更新完成后,在操作 

 

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用 CSS 覆盖默认的 Dialog 样式。例如,可以在 CSS 定义 .el-dialog 的样式,来修改 Dialog 的背景颜色、大小等。也可以在全局配置设置 dialog.css。 也可以在每个 Dialog 组件上设置 :class 属性来设置类名以及 :style 属性来设置样式。 需要注意的是,如果要覆盖内部的样式,可能需要使用 !important。 ### 回答2: Element UI是由饿了么公司开发的一套基于Vue.js的UI组件库,它提供了很多常用的UI组件,其包括了Dialog对话框组件。Dialog组件常见于弹出框、提示框、模态框等,是Web前端常见的交互组件之一。 Element UI Dialog组件提供了许多可定制的选项和配置,而修改Dialog组件的样式则是通过重写Element UI的CSS规则实现的。 首先,我们需要了解Dialog组件的基本结构和样式。可以通过以下步骤找到Dialog组件的对应样式: 1.在Element UI官网找到Dialog组件的文档,从找到CSS的class名称 2.查看Dialog组件的DOM结构 3.使用开发者工具(如Chrome浏览器的DevTools)调试组件样式 例如,在Dialog组件,窗口主体部分的CSS类名为“el-dialog__body”,我们就可以修改这个类的样式来改变Dialog组件的主要样式。以下是一些常见的修改Dialog组件样式的方法: 1.修改背景颜色:通过修改“el-dialog__body”的background-color属性来改变Dialog窗口的背景颜色; 2.修改边框颜色:通过修改“el-dialog__wrapper”的border-color属性来改变Dialog窗口的边框颜色; 3.修改标题栏样式:通过修改“el-dialog__title”的样式来修改Dialog窗口的标题栏样式,如颜色、字体大小、粗细等; 4.修改按钮样式:通过修改“el-button”的样式来修改Dialog窗口的按钮样式,如字体大小、颜色、背景色等。 需要注意的是,修改Dialog组件样式时,不要直接修改Element UI源代码,而应该通过覆盖CSS规则来实现。这样可以方便地升级组件库,同时避免出现冲突或不兼容的情况。 总结来说,修改Element UIDialog组件的样式需要注意以下几个步骤:了解组件的基本结构和样式,查找相应的CSS类名,通过覆盖CSS规则来进行修改,避免直接修改源代码带来的风险。掌握这些基础知识,就可以很好地修改Element UIDialog组件的样式。 ### 回答3: ElementUI是一套比较优秀的Vue.js组件库,它的弹窗组件贴切实用,可以直接将一个对象转化为弹窗,简化了弹窗开发流程。同时,ElementUI也提供了弹窗组件的样式修改方法。 下面我们来介绍一下如何通过CSS修改ElementUIdialog组件样式。 ElementUIdialog组件有主题色,而我们需要修改的样式知识主题色之外的基础样式。打开组件库dialog样式,我们可以看到样式的构成: ```css .el-dialog__header { padding: 20px; position: relative; background-color: #5b6777; color: #fff; border-top-left-radius: 4px; border-top-right-radius: 4px; } ... ``` 从代码我们可以看到,一个dialog弹窗由很多元素构成,我们可以通过修改这些元素的样式来达到自己想要的效果。例如,我们要修改dialog的头部背景颜色: ```css .el-dialog__header { background-color: red; } ``` 而如果我们要修改整个dialog的背景颜色: ```css .el-dialog__wrapper, .el-dialog__wrapper .el-dialog{ background-color: #f5f5f5; } ``` 这里我们用到了冒号选择器(::before)来修改dialog的背景颜色,另外因为弹窗里的内容是由一个div包裹,所以我们还要添加样式修改所有div的背景颜色: ```css .el-dialog .el-dialog__body { background-color: #f5f5f5; } ``` 通过上面的修改,我们可以大致掌握修改dialog组件样式的方法,只需要通过观察ElementUI提供的样式代码,找到需要修改的元素,然后进行修改即可。当然,这里的示例只是一个简单的样式修改,对于更加复杂的样式修改,我们可能需要更深入地了解ElementUI的CSS样式结构。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值