ElementUI或AntDesign拿不到对话框内元素的 ref或者dom

https://www.cnblogs.com/trampeagle/p/15146668.html

element-UI 组件 dialog 中 ref 获取不到的问题解决方案_el-dialog ref获取不到-CSDN博客

在使用Vue.js结合ElementUI或Ant Design Vue这类UI框架时,有时会遇到无法直接通过ref获取到对话框(Dialog)内元素DOM的问题。这主要是因为Vue的异步更新机制和组件的挂载(mount)时机 。当对话框是条件渲染(如使用v-if)时,它可能在Vue的DOM更新周期中尚未挂载或完全渲染,因此无法立即通过ref访问其内部元素。

1.nextTick

Javascript事件循环应用---nextTick()详解_js nexttick-CSDN博客

this.$nextTick() 是 Vue.js 中的一个实例方法,它非常有用,尤其是在处理 DOM 更新和依赖 DOM 的操作时。这个方法允许你在 Vue 完成 DOM 更新后立即执行某个回调函数。这对于确保你的 DOM 查询或操作是在 Vue 的异步更新队列之后执行的非常关键。

复制代码
this.$refs.myDialog.open(); // 假设这是打开对话框的方法  
this.$nextTick(() => {  
  // 现在对话框已经打开并渲染完成,可以安全地访问其内部元素  
  console.log(this.$refs.someInnerElement); // someInnerElement是对话框内元素的ref  
});

2.对话框身上方法getContainer()【Ant】

复制代码
  <!--a-modal ref拿不到的解决方法-->
    <a-modal :visible="vis" @ok="handleOk"  @cancel="handleCancel"  :getContainer="() => $refs.dialogContainer">
      <div class="head" style="text-align: center"><h1>{{ diaOption.name }}</h1></div>
      <div class="infos">
<!--       <div class="info-item">设备状态:<span><img src="" alt=""></span></div>-->
        <div class="info-item"><b>所属区域:</b><span>{{ diaOption.location }}</span></div>
        <div class="info-item"><b> {{diaOption.currentName }}:</b> <span>{{ diaOption.currentValue }}</span></div>
        <div class="info-item"><b>布设时间:</b><span>2024年7月1日</span></div>
      </div>
<!--      <br>-->
      <div class="chart-title"><b>{{ diaOption.chartTitle }}:</b></div>
      <div id="chart" ref="chart"
        style="width: 440px;height: 260px; margin: 0 auto; background-color: #1e1f22"></div>
    </a-modal>

3. 监听对话框的open事件(Element)

对于某些UI框架(如ElementUI),对话框组件可能提供了open或visible-change等事件。你可以在这些事件的回调函数中访问DOM元素。

复制代码
<el-dialog @open="handleOpen" ref="myDialog">  
  <div ref="someInnerElement">这是对话框内的元素</div>  
</el-dialog>
-----------------------------------------------------
//javascript

methods: {  
  handleOpen() {  
    this.$nextTick(() => {  
      console.log(this.$refs.someInnerElement);  
    });  
  }  
}
相关推荐
变与不变80613 分钟前
jQuery怎么使用
前端·javascript
神膘护体小月半22 分钟前
flex 布局的 order 属性
前端·css
paopaokaka_luck27 分钟前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
仰望.31 分钟前
vue 表格组件 vxe-table 树表格懒加载支持拖拽排序的详细用法
前端·javascript·vue.js·vxe-table
前端 贾公子33 分钟前
vite-plugin-uni-manifest 升级指南
前端
小码哥_常37 分钟前
iPhone 用户传了张 HEIC,我的前端崩了
前端
小码哥_常44 分钟前
你发的原图可能暴露你家地址——聊聊图片 EXIF 隐私
前端
java1234_小锋1 小时前
【技术专题】CSS3 网页技术 - CSS3 优先级
前端·css·css3
鸿蒙开发2 小时前
共享 Schema 与 SchemaFactory
前端·后端·harmonyos
屏什么录2 小时前
录屏超过两小时就卡顿崩盘?从参数调优到代码实现,一文彻底搞定长时间录屏
前端·音视频开发