动态计算el-table高度
2023-12-06 本文已影响0人
云高风轻
1. 前言
- 这篇文章的起因是上篇文章el-table增加顶部滚动条
2. 模板
- el-table 增加 height 属性
<el-table ref="myTable" :data="tableData" :height="tableData.length ? tableHeight : 150"
- 没有数据的时候也要给个高度,显示表头,和表格为空的显示文本
- 这个高度是计算属性
computed
来实现的,我没有单独写set
get
方法,所以并不能直接 this.tableHeight = 0- 这个在请求列表为空的时候需要设置,所以我直接在这设置了
3. 数据
- 计算属性
computed: {
tableHeight() {
// 在这里使用 calc 函数计算表格高度
return `calc(${this.windowHeight}px - ${this.tableTop}px - 50px)`;
},
},
- 我这里底部总是多一节,所以减去了个 50px ,也留个底部间距
- data
tableTop: 0, // 表格距离顶部的初始值
windowHeight: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight,
4. 逻辑处理
- mounted
mounted() {
this.$nextTick(() => {
this.tableTop = this.$refs.myTable.$el.getBoundingClientRect().top;
this.handleResize();
});
window.addEventListener('resize', this.handleResize);
this.handleResize();
},
- 这里使用了
$nextTick
, 获取高度可能不是很准确,因为DOM 渲染和获取高度的时机有关,所以写到$nextTick
保证DOM渲染完毕
- destroyed
destroyed() {
// 组件销毁时移除事件监听
window.removeEventListener('resize', this.handleResize);
},
- methods
handleResize() {
// 更新窗口高度
this.windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
},