vue3 element-plus中,el-dialog组件内,无法通过ref获得组件实例

v3+element管理系统----主题定制 && 刷新 && 全屏 / document.documentElement 是全局变量时// 获取 css 变量// 设置 css 变量。 阅读详情
AI摘要

本文详细解析了Element Plus 中el-dialog的懒加载特性,指出默认插槽在打开前未渲染到DOM,并展示了如何在open、opened和before-close事件中进行DOM操作和组件访问。通过实例代码演示了如何利用opened事件来获取和操作内部组件。

面对这个问题,我在官方文档上找到下面这样一段描述:

The content of Dialog is lazily rendered, which means the default slot is not rendered onto the DOM until it is firstly opened. Therefore, if you need to perform a DOM manipulation or access a component using ref, do it in the open event callback.

中文大意为:

对话框中的内容是懒加载的,这意味着在对话框打开之前,默认插槽(个人理解为el-dialog标签内的内容)不会被渲染到DOM上。因此,如果你需要执行一个DOM操作或通过ref访问组件,可在open事件回调中进行。

我查了下elementplus的官方网站,el-dialog有下面这些事件:

el-dialog事件
经过测试,发现可以通过opened事件回调(open不行),可以访问el-dialog中组件的实例。下面是一段测试代码。

<template>
  <div>
    <h1 ref="outsideDialogRef01">对话框之外:你好</h1>
    <el-dialog
      title="videoTitle"
      v-model="dialogVisible"
      :fullscreen="true"
      :before-close="handleClose"
      @opened="opened"
      @close="closing"
    >
      <h1 ref="inDialogRef01">对话框之内: Hello, world</h1>
      <div ref="inDialogRef02">对话框之内: 12345678</div>
    </el-dialog>
  </div>
</template>

<script setup lang="ts">
import { ref, onMounted } from "vue";

const dialogVisible = ref(false);

const handleClose = () => {
  dialogVisible.value = false;
};

const outsideDialogRef01 = ref(null);

const inDialogRef01 = ref(null);

const inDialogRef02 = ref(null);

onMounted(() => {
  console.log("======mounted======");
  console.log("outsideDialogRef01", outsideDialogRef01.value);
  console.log("inDialogRef01", inDialogRef01.value);
  console.log("inDialogRef02", inDialogRef02.value);
});

const showDialog = () => {
  dialogVisible.value = true;

  console.log("======showing======");
  console.log("outsideDialogRef01", outsideDialogRef01.value);
  console.log("inDialogRef01", inDialogRef01.value);
  console.log("inDialogRef02", inDialogRef02.value);
};

const opening = () => {
  console.log("======opening======");
  console.log("outsideDialogRef01", outsideDialogRef01.value);
  console.log("inDialogRef01", inDialogRef01.value);
  console.log("inDialogRef02", inDialogRef02.value);
};
const opened = () => {
  console.log("======opened======");
  console.log("outsideDialogRef01", outsideDialogRef01.value);
  console.log("inDialogRef01", inDialogRef01.value);
  console.log("inDialogRef02", inDialogRef02.value);
};

const closing = () => {
  console.log("======closing======");
  console.log("outsideDialogRef01", outsideDialogRef01.value);
  console.log("inDialogRef01", inDialogRef01.value);
  console.log("inDialogRef02", inDialogRef02.value);
};

defineExpose({
  showDialog,
});
</script>

测试结果如下:

测试结果

Element-UI 2.x 到 Element-Plus 2.x 升级实战:5个常见组件API变更与修复方案 本文详细解析了从Element-UI 2.x升级到Element-Plus 2.x的实战过程,重点分析了5个常见组件的API变更与修复方案,包括el-dialog、el-table、el-icon、el-form和el-button。针对Vue2到Vue3的升级挑战,提供了语法差异、组件重构、插槽语法等核心变更点的对比说明,并给出渐进式升级策略和自动化转换工具建议,帮助开发者高效完成前端组件库迁移。 阅读详情

相关推荐

技术分享 | 弹窗开发中,如何使用 Hook 封装 el-dialog?

本文将分享如何使用 useDialog Hook 封装 el-dialog,实现更灵活、更易用的弹窗组件。

LigaAI的博客 1518

vue3父组件调用子组件el-dialog对话框

在写项目的时候,经常要使用父子组件通讯,我已经写了很多篇博客来介绍父子组件通讯了,vue中的父子组件通讯方式有差不多10来种,最常用的就那么一两种,这里我介绍其中我认为最基础的两种。因为目标是在父组件中,通过点击按钮事件来打开子组件中的el-dialog对话框,所以比传统的父传子要复杂一点。

黄钢的博客 8307

Vue3与Element-Plus单页应用:零配置CDN引入与组合式API实战

渐进式JavaScript框架Vue.js以其声明式渲染和组件化开发模式,成为构建现代Web用户界面的主流选择。其核心原理在于通过响应式数据绑定与虚拟DOM技术,高效地同步视图与状态,从而提升开发效率与应用性能。Vue3的组合式API进一步优化了逻辑复用与代码组织能力,尤其适合复杂交互场景。在工程实践中,对于快速原型验证、内部工具开发或轻量级演示等场景,完整的脚手架项目构建流程可能显得过于繁重。此时,通过CDN直接引入Vue3与Element-Plus UI库,在单一HTML文件中进行开发,成为一种高效的“

weixin_30684743的博客 320

vue3 + el-dialog

vue3 + el-dialog

weixin_39568072的博客 3589

STM32F407标准库下ADC多通道DMA采集的配置与优化

本文详细介绍了STM32F407标准库下ADC多通道DMA采集的配置与优化方法。通过GPIO模拟输入配置、ADC时钟和模式设置、DMA传输参数配置等关键步骤,实现高效的多通道数据采集。文章还提供了性能优化技巧和常见问题排查指南,帮助开发者提升采样速率和稳定性。

weixin_29192141的博客 434

Tlsr8258开发-程序烧写

开源一小步,进步一大步

自学嵌入式 1774

vue3中实现el-dialog弹窗

vue3中实现el-dialog弹窗

syl的博客 6120

C语言——利用矩阵LU分解法求逆、行列式

本章介绍了LU分解法,以及如何利用LU分解法求逆、行列式,针对每个公式、原理、代码进行了详细介绍,希望可以给大家带来帮助。

王元笙 1万+

Vue3 优雅的模态框封装方案

Mr Mao’blog - gitee.io/mao-blogVue3 优雅的模态框封装方法 - 初探Vue3 优雅的模态框封装方法 - 实践Vue3 优雅的模态框封装方法 - 定制上次说到利用虚拟节点和瞬移组件制作模态框组件,并支持 template 中调用和 JavaScript 中调起但实际上,我们在工作中不会花这么大的精力去做这些繁琐的工作,一般都会直接使用组件库的弹出层去修改(例如 element-plus)但所涉及到的问题又回到了通篇都在描述的点上:不通用,不能很方便的调用(例如我想在 /

leg_hair_king的博客 1733

使用MLP解决OCR问题(OpenCV)(下)

分类模型:        分类模型涉及的一个比较关键的问题就是输出的10维向量是如何与具体的类别挂钩的。实际上:10维向量的每一位都代表一类,在对于训练集的表达中,如果输入数据是0,则10维向量的第一位赋值为1,其余均为0。即0对应[1,0,0,0,0,0,0,0,0,0]。MLP模型训练完成后,就需要对用户输入的数据所属类别进行判定。这时得到的输出数据基本不可能是正好的所属类为1,其他位置为0

qq_18515405的专栏 1906

Mann-Kendall检验全解析:从原理到11种变体及Python实现

本文全面解析Mann-Kendall检验,从基础原理到应对自相关、季节性等复杂数据的11种关键变体,如Hamed-Rao修正、季节性MK和趋势自由预白化(TFPW)。详细阐述各方法的适用场景与数学原理,并提供完整的Python实战代码,帮助研究者针对不同数据特性选择最稳健的趋势分析方法。

weixin_29050271的博客 459

[element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案

在没有进行任何操作的时候,使用无法获取el-dialog中的内部元素,这个问题会导致很多bug.官方解释,在open事件回调中进行,但是open()是弹窗打开时候的会调,有可能在此处获取的时候,还没有渲染成功,导致依然获取不了。

qq_14993591的博客 2112

手把手教你用RoboTwin训练RDT模型:从环境配置到实战微调(避坑指南)

本文提供了一份详尽的避坑指南,手把手教你如何在RoboTwin开源仿真环境中,从零开始配置环境、采集数据并完成RDT视觉语言动作模型的实战微调。文章涵盖了环境搭建、数据流水线构建、模型配置与训练等关键步骤,旨在帮助研究者和开发者高效利用仿真数据,低成本探索具身智能应用。

weixin_29094979的博客 132

element-plus中el-dialog导致props报错问题解决

当我们在开发 `vue3` 项目搭配 `element-plus` 时,要使用 `el-dialog` 组件时,可能很多小伙伴是从 `vue2 + element-ui`过来的,因此在使用的时候会将 `visible` 控制显示的参数通过父组件传递进来,导致上面的报错。 > tips:因为`element-plus` 删除了 `visible` 属性,因此这里要用 `v-model`,否则会报 `el-dialog` 组件上找不到 `visible` 属性的错误。

smallteddy.blog.youkuaiyun.com 4140

S速度曲线轨迹规划(普通变频位置闭环控制算法详细介绍+SCL代码)

位置控制用PD控制器,详细内容介绍请查看下面博客文章:PD控制器算法详细解读_RXXW_Dor的博客-优快云博客鉴于积分和微分在工程上的大量应用,这篇博文主要讲解工程上的如何求导f'(x),导数反映的是函数(信号)的变化率,牛顿也是在研究运动的时候提出了微积分的概念,我们知道反映位移变化的快慢程度是速度v(t),反映速度变化快慢程度的物理量是加速度(速度的变化率)。

RXXW_Dor的博客 3887

AI Agent开发大全第一课-AI是什么以及如何使用AI

近年来,人工智能的迅猛发展引发了广泛的关注,尤其是“大模型”这一概念越来越深入人心。大模型,顾名思义,通常指的是那些拥有大量参数、能够处理复杂任务的机器学习模型。与传统小模型相比,大模型在数据处理、信息理解和生成等方面表现更加出色。为了理解为什么现在的AI被称为大模型,我们需要深入探讨几个关键因素。立角色是指在提示词中清晰地界定交互双方的身份。明确用户希望模型扮演的角色,可以帮助模型更准确地理解上下文和用户需求。

打造全国最全的AI Agent开发知识领域的博客 1406

vue3-elementPlus部分组件样式修改

本文汇总了Vue2项目中ElementUI组件的样式修改方案,涵盖常见组件如el-dropdown、el-input、el-select等。重点包括:1)使用:deep()替代已废弃的/deep/和::v-deep选择器;2)各组件状态(hover/focus/active)的边框、文字、背景色定制;3)特殊组件如el-date-picker需设置teleported属性;4)表格列样式、分页器、上传组件等交互样式优化。所有修改均采用CSS变量覆盖或深度选择器实现,注意全局样式需避免scoped限制。

weixin_46479909的博客 4177

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

vue3+element-plus 组件功能实现 上传功能

接着调用后端DeviceModelApi的importAlarms方法进行文件上传,并处理返回结果:从返回消息中解析出成功导入和失败的记录数量,根据失败数量获取错误列表(如果有),最后通过导入对话框组件的引用调用updateImportResult方法更新导入对话框中显示的导入结果信息,包括总数、成功数、失败数、错误列表以及文件类型标识等内容。支持导入特定格式(.xlsx、.csv)且大小不超过 10M 的文件,能展示导入数据的统计情况并提供预览功能,方便用户在正式导入前查看文件内容。

a1997bcd的博客 1526

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Vue3项目实战:解决vue-simple-uploader在Element Plus弹窗中的渲染问题

本文针对Vue3项目中vue-simple-uploader在Element Plus弹窗内渲染异常的问题,深入剖析了Vue3响应式系统与组件生命周期的变化根源,并提供了从源码定制、生命周期管理到与el-dialog优雅集成的完整解决方案,重点解决了大文件分片上传在动态渲染场景下的功能失效问题。

c2d3e4f的博客 724

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

vue插件element ui,element plus,ElMessage消息框,ref,动态绑定语法

vue插件element ui,element plus,ElMessage消息框,ref,动态绑定语法

enthan809882的博客 196

Vue3(篇三) Element Plus

在与后端交互:axios与请求封装中,我们掌握了前端与后端 API 交互的方式。现在数据能获取到了,但如何优雅地展示和管理这些数据呢?直接用原生 HTML 标签(table、form)可以实现功能,但样式简陋、交互生硬,还需要自己写大量 CSS 和 JavaScript。在实际开发中,我们通常使用UI 组件库来快速构建美观、交互友好的界面。是 Vue3 生态中最成熟的 UI 组件库,提供了表格、表单、对话框、分页等常用组件,开箱即用。本文将通过一个学生管理系统。

勇往直前的博客 310

Vue3中Element Plus组件库el-eialog弹框中的input无法获取表单焦点的解决办法

如果组件在el-dialog弹框中使用,应该改为如下写法,才能正常获取焦点。// 声明一个 ref 来存放该元素的引用。// 声明一个 ref 来存放该元素的引用。// 必须和模板里的 ref 同名。// 必须和模板里的 ref 同名。以下是vue.js官网给出的示例。

彭世瑜的博客 788

element-plus vue3 dialog form 清空 重置 resetFields

添加、修改同一个弹框,清空form表单数据。 element-plus vue3 dialog form 清空 重置 resetFields

zhengjf123的专栏 6702

拆解 Element Plus:配置注入机制与 3 个从后台到生产的落地场景

把 `--el-color-primary` 改成品牌色上线,产品截图回来却只有按钮主色变了,hover 态和下拉选中边框还是旧蓝;同一时间,工具函数里调用的 `ElMessage.success` 文案也没跟上新配的 locale。这是 Element Plus 落地时最常见的两类事故。它们的根子不在样式表,而在组件库的派生色体系和配置注入机制——看 API 文档摸不到底,得打开 `packag

gitblog_07663的博客 451

Element-UI记录

的。

不甘平凡的小鸟的专栏 303

django element组件样式没有渲染_element-plus源码学习日志-02

每天一小步,书接上文https://zhuanlan.zhihu.com/p/338545504​zhuanlan.zhihu.com上篇说到了,看element-plus代码的一些准备工作,和button组件,涉及到了一些TS开发时的注意事项,和composition api 的一些api(ps:感觉有点拗口),今天看一下另一个非常常用的组件Input。如果涉及到前篇说过的属性呢就一句带过组件I...

weixin_42122432的博客 622
上一篇: 【记录】Linux Mint 操作系统上,尝试编译 jdk源码,configure时报错 configure: error: Could not find fontconfig!
下一篇: 在Spring框架中,Bean的相关含义
「已注销」
博客等级 码龄5年 65粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值