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

问题描述

在没有进行任何操作的时候,使用

js 复制代码
this.$refs.xxxx 

无法获取el-dialog中的内部元素,这个问题会导致很多bug.

官方解释,在open事件回调中进行,但是open()是弹窗打开时候的会调,有可能在此处获取的时候,还没有渲染成功,导致依然获取不了。

1、可以通过定时器延时获取

html 复制代码
<el-dialog  @opened="openWebRtc()" >
    <!--子组件 -->
   <web-rtc ref="webrtc" v-show="showWebRtcVideo" :videoUrl="WebRtcVideoUrl"></web-rtc>
</el-dialog>
 
openWebRtc(){
   setTimeout(() => {
    this.$refs.webrtc.start();
  }, 0);
},

2、通过opend会调获取

html 复制代码
<el-dialog  @opened="openWebRtc()" >
    <!--子组件 -->
   <web-rtc ref="webrtc" v-show="showWebRtcVideo" :videoUrl="WebRtcVideoUrl"></web-rtc>
</el-dialog>
 
openWebRtc(){
   this.$refs.webrtc.start();
},

3、 强制加载dialog中的内容

使用下面的代码,就是将dialog强制加载一遍,这个因为速度快肉眼是看不见加载的过程的

js 复制代码
mounted() {
    this.updateInsertOpen = true //:visible.sync="open"
    this.$refs.updateInsertDialog.rendered = true //updateInsertDialog是dialog的ref;
    this.updateInsertOpen = false
  },

参考:
element-UI 组件 dialog 中 ref 获取不到的问题解决方案

vue中el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案 使用强制提前加载dialog方法

相关推荐
加油乐9 分钟前
vue3实现表格动态列及自定义列排序
前端·vue.js
Hide Asn1 小时前
css-css执行的三种方式和css选择器
前端·css
萌新小白的逆袭1 小时前
HTML的重要知识
前端·html
移动端小伙伴1 小时前
《iOS 通知系统全解》目录索引
前端·swift
罗密欧与猪过夜6761 小时前
React中的State为什么要叫做照片快照
前端
影子信息1 小时前
vue openlayer创建地图弹框overlay
vue.js·openlayer·地图
xyccstudio1 小时前
关于 expandSafeArea 不生效问题
前端
独立开阀者_FwtCoder1 小时前
2025年每个开发者都必须知道的100多个JavaScript术语(附示例)
前端·javascript·vue.js
wwy_frontend1 小时前
积累:03-ES6
前端
鹏程十八少1 小时前
1. Android 组件化一 Arounter核心路由框架 原理深入解析 和实战
前端