el-table 在刷新页面后高度显示异常的问题

最近在维护一个老项目的时候,发现这么一个有趣的问题,页面中使用了 el-table 这个组件来展示数据并且通过 height 属性设置了固定高度,如果是正常的点击跳转,表格高度也能正确地显示,但是只要你一刷新页面后,表格高度就会出现异常了,只能显示一条数据的高度。

项目中的使用代码如下:

<template>
    <el-table :height="tableHeight">
        ...
    </el-table>
</template>

<script>
export default {
    data() {
        return {
            tableHeight: document.body.offsetHeight - 100 + 'px' // 错误的使用方式
        }
    }
}
</script>

可以看到我们在 data 方法中直接计算了表格高度,如果是正常的点击跳转打开的组件,是能够正确获取到页面高度的,但是刷新的话,document.body.offsetHeight 的高度就会为 0,所以解决的办法就是我们把高度的计算放到 mounted 生命周期中,确保组件挂载了再来计算高度,这样就能正确获取到页面高度了。

所以修复后的代码如下:

<template>
    <el-table :height="tableHeight">
        ...
    </el-table>
</template>

<script>
export default {
    data() {
        return {
            tableHeight: '0px'
        }
    },

    mounted() {
        // 延迟获取页面高度, 确保能正确返回
        this.tableHeight = document.body.offsetHeight - 100 + 'px'
    }
}
</script>

以上就是针对这个小问题的修复方案,当然如果想要完美的话,还是要记得监听窗口的大小变化,实时计算高度。