当前位置: 首页 > article >正文

根据 el-dialog 的高度动态计算 el-table 的高度

根据 el-dialog 的高度动态计算 el-table 的高度,可以使用 Vue 的 ref 和生命周期钩子来实现。以下是一个实现方案:

  1. 首先,给 el-dialog 和 el-table 添加 ref:
<el-dialog
  v-model="testInstrumentDialogVisible"
  title="选择测试仪器"
  align-center
  append-to-body
  destroy-on-close
  ref="testInstrumentDialog"
>
  <!-- ... other content ... -->
  <el-table
    :data="testInstrumentList"
    border
    highlight-current-row
    size="small"
    row-key="tableRowId"
    class="work-item-table"
    @selection-change="testInstrumentSelectionChange"
    ref="testInstrumentTable"
    :height="tableHeight"
  >
    <!-- ... table columns ... -->
  </el-table>
  <!-- ... other content ... -->
</el-dialog>
  1. 在 script 部分添加必要的响应式变量和方法:
<script setup lang="ts">
import { ref, nextTick, onMounted, watch } from 'vue';

// ... other imports and code ...

const testInstrumentDialog = ref(null);
const testInstrumentTable = ref(null);
const tableHeight = ref(300); // Default height

const calculateTableHeight = () => {
  nextTick(() => {
    if (testInstrumentDialog.value && testInstrumentTable.value) {
      const dialogHeight = testInstrumentDialog.value.$el.clientHeight;
      const dialogHeaderHeight = testInstrumentDialog.value.$el.querySelector('.el-dialog__header').clientHeight;
      const dialogFooterHeight = testInstrumentDialog.value.$el.querySelector('.el-dialog__footer').clientHeight;
      const otherContentHeight = 100; // Adjust this value based on other content in the dialog
      
      tableHeight.value = dialogHeight - dialogHeaderHeight - dialogFooterHeight - otherContentHeight;
    }
  });
};

// Watch for changes in dialog visibility
watch(() => testInstrumentDialogVisible.value, (newVal) => {
  if (newVal) {
    calculateTableHeight();
  }
});

// Recalculate on window resize
onMounted(() => {
  window.addEventListener('resize', calculateTableHeight);
});

// Don't forget to remove the event listener
onUnmounted(() => {
  window.removeEventListener('resize', calculateTableHeight);
});

// ... rest of your code ...
</script>
  1. 更新 openTestInstrument 方法以在打开对话框后计算表格高度:
const openTestInstrument = () => {
  searchTestInstrumentList();
  testInstrumentDialogVisible.value = true;
  nextTick(() => {
    calculateTableHeight();
  });
};

这个解决方案的工作原理如下:

  1. 我们给 el-dialog 和 el-table 添加了 ref,以便可以访问它们的 DOM 元素。
  2. 我们创建了一个 calculateTableHeight 方法,它计算对话框的可用高度并设置表格的高度。
  3. 我们监听对话框的可见性变化,当对话框打开时重新计算表格高度。
  4. 我们还在窗口调整大小时重新计算高度,以确保响应式布局。
  5. openTestInstrument 方法中,我们在对话框打开后使用 nextTick 来确保 DOM 已更新,然后计算表格高度。

这样,每次打开对话框或调整窗口大小时,表格的高度都会自动调整以适应对话框的大小,避免样式异常。


http://www.kler.cn/a/466444.html

相关文章:

  • 一文详解YOLOv8多模态目标检测(可见光+红外图像,基于Ultralytics官方代码实现),轻松入门多模态检测领域!
  • 连接Milvus
  • Qt之屏幕录制设计(十六)
  • 基于微信小程序的面部动作检测系统
  • 【CSS】第二天 画盒子、文字控制属性
  • PHP7和PHP8的最佳实践
  • 常规继承类对象大小
  • Cause: java.sql.SQLException: sql injection violation, comment not allow异常问题处理
  • 【MySQL基础篇】三、表结构的操作
  • 最新MySQL面试题(2025超详细版)
  • 【GeekBand】C++设计模式笔记22_Chain of Responsibility_职责链
  • AWS Lambda基础知识
  • 【Vue】分享一个快速入门的前端框架以及如何搭建
  • 非docker方式部署openwebui过程记录
  • linux-centos-安装miniconda3
  • 掌控ctf-2月赛
  • 区块链安全常见的攻击分析——可预测随机数漏洞 (Predictable Randomness Vulnerability)【12】
  • 路由基本配置实验
  • 《一个孤独漫步者的遐想-卢梭》阅读笔记
  • C#数字转大写人民币
  • docker镜像制作的命令,docker自定义镜像
  • AWS re:Invent 2024 - Dr. Werner Vogels 主题演讲
  • VTK知识学习(28)-区域提取
  • SpringMVC的消息转换器
  • 国产芯RK3568教学实验箱操作案例:颜色识别抓取积木
  • Android 第三方框架:网络框架:OkHttp:源码分析:缓存