• el-table解决数据过少小于高度有留白的问题


    问题:给el-table设置个高度,高度为500px,之后就添加如下4条数据,那么底部就没数据,直接就空白了,本文章就是为了解决这个问题,如果底部留白那么就添加几条空数据就行了.如果数据已达到高度了那么就不会留白了

    1.效果

    这个空列可以根据高度来决定添加几个空格子去铺满列表,解决列表留白问题

     2.主要代码讲解

    2.1为了不影响原始数据,建议在获取到接口列表数据后存入到俩个变量中,一个作为展示一个作为判断添加几行空数据,

    1. addTable() {
    2. // 这边就是调用列表的接口之后数据展示
    3. this.tableData = [
    4. {
    5. date: '2016-05-02',
    6. name: '王小虎',
    7. address: '上海市普陀'
    8. },
    9. {
    10. date: '2016-05-04',
    11. name: '王小虎',
    12. address: '上海市普'
    13. },
    14. {
    15. date: '2016-05-02',
    16. name: '王小虎',
    17. address: '上海市普陀'
    18. }
    19. ];
    20. this.tableDataFilter = [
    21. {
    22. date: '2016-05-02',
    23. name: '王小虎',
    24. address: '上海市普陀'
    25. },
    26. {
    27. date: '2016-05-04',
    28. name: '王小虎',
    29. address: '上海市普'
    30. },
    31. {
    32. date: '2016-05-02',
    33. name: '王小虎',
    34. address: '上海市普陀'
    35. }
    36. ];
    37. this.$nextTick(() => {
    38. this.handleTableResize();
    39. });
    40. }

    2.2监听页面高度发生变化后,需要判断展示几行空数据。

        window.addEventListener('resize', this.handleTableResize); // 监听页面尺寸变化

    2.3给每行设置固定的高度,必须要固定死,不然就判断失误了,如果内容过多可以设置show-overflow-tooltip

    1. .el-table /deep/ .el-table__row {
    2. height: 50px;
    3. }

    2.4 关键代码

    设置个tableHeight:初始值为0

    整个表格的高度,给el-table绑定一个ref,名字叫algorithmRef

    this.$refs.algorithmRef.$el.clientHeight

    整个表格还剩下的留白的高度,这个-100是减去表头,-50是上面设置的一行的高度之后,50 * this.tableDataFilter.lengt,这个就是有数据的行高度,最后得出表格剩下留白高度

      height = this.tableHeight - 100 - 50 * this.tableDataFilter.length;

     result:要添加几行空白给表格数据

    最后把空数据添加到tableData中

    1. getTableHeight() {
    2. this.tableHeight = this.$refs.algorithmRef.$el.clientHeight;
    3. let height = 0;
    4. height = this.tableHeight - 100 - 50 * this.tableDataFilter.length;
    5. const result = Math.floor(height / 50);
    6. this.tableAdd(result);
    7. console.log(result, '要传给tableAdd的值');
    8. },
    9. tableAdd(num) {
    10. let addTable = [];
    11. for (let i = 0; i < num; i++) {
    12. addTable.push({ date: '', name: '', address: '' });
    13. }
    14. this.tableData = [...this.tableDataFilter, ...addTable];
    15. },

    3.完整代码

    1. <template>
    2. <div class="container-table" ref="paramRef">
    3. <el-button @click="addTable()">添加el-button>
    4. <div class="table-box">
    5. <el-table
    6. border
    7. :cell-style="{ borderColor: '#C0C0C0' }"
    8. :header-cell-style="{ borderColor: '#c0c0c0' }"
    9. :data="tableData"
    10. stripe
    11. height="100%"
    12. @resize="handleTableResize"
    13. style="width: 100%"
    14. ref="algorithmRef"
    15. class="tablebox"
    16. >
    17. <el-table-column show-overflow-tooltip label="自动数据" align="center">
    18. <el-table-column prop="date" label="日期" width="180"> el-table-column>
    19. <el-table-column prop="name" label="姓名" width="180"> el-table-column>
    20. el-table-column>
    21. <el-table-column label="人工数据" align="center">
    22. <el-table-column prop="address" label="地址"> el-table-column>
    23. <el-table-column prop="date" label="日期" width="180"> el-table-column>
    24. <el-table-column prop="name" label="姓名" width="180"> el-table-column>
    25. el-table-column>
    26. el-table>
    27. div>
    28. div>
    29. template>
    30. <script>
    31. export default {
    32. data() {
    33. return {
    34. tableData: [],
    35. tableDataFilter: [],
    36. tableHeight: 0 // 行高
    37. };
    38. },
    39. mounted() {
    40. // setTimeout(() => {
    41. // }, 1000);
    42. this.$nextTick(() => {
    43. this.getTableHeight(); // 监听el-table尺寸变化事件,重新获取表格高度
    44. window.addEventListener('resize', this.handleTableResize); // 监听页面尺寸变化
    45. });
    46. },
    47. methods: {
    48. handleTableResize() {
    49. this.$nextTick(() => {
    50. this.getTableHeight(); // 监听el-table尺寸变化事件,重新获取表格高度
    51. });
    52. // this.tableHeight = this.$refs.dynamicTable.$el.clientHeight;
    53. // console.log();
    54. },
    55. getTableHeight() {
    56. this.tableHeight = this.$refs.algorithmRef.$el.clientHeight;
    57. let height = 0;
    58. // 留白的高度
    59. height = this.tableHeight - 100 - 50 * this.tableDataFilter.length;
    60. const result = Math.floor(height / 50);
    61. this.tableAdd(result);
    62. console.log(result, '要传给tableAdd的值');
    63. },
    64. tableAdd(num) {
    65. let addTable = [];
    66. for (let i = 0; i < num; i++) {
    67. addTable.push({ date: '', name: '', address: '' });
    68. }
    69. this.tableData = [...this.tableDataFilter, ...addTable];
    70. },
    71. handlePageResize() {
    72. this.$nextTick(() => {
    73. this.getTableHeight(); // 页面尺寸变化后重新获取表格高度
    74. });
    75. },
    76. addTable() {
    77. // 这边就是调用列表的接口之后数据展示
    78. this.tableData = [
    79. {
    80. date: '2016-05-02',
    81. name: '王小虎',
    82. address: '上海市普陀'
    83. },
    84. {
    85. date: '2016-05-04',
    86. name: '王小虎',
    87. address: '上海市普'
    88. },
    89. {
    90. date: '2016-05-02',
    91. name: '王小虎',
    92. address: '上海市普陀'
    93. },
    94. {
    95. date: '2016-05-02',
    96. name: '王小虎',
    97. address: '上海市普陀'
    98. },
    99. {
    100. date: '2016-05-04',
    101. name: '王小虎',
    102. address: '上海市普'
    103. }
    104. ];
    105. this.tableDataFilter = [
    106. {
    107. date: '2016-05-02',
    108. name: '王小虎',
    109. address: '上海市普陀'
    110. },
    111. {
    112. date: '2016-05-04',
    113. name: '王小虎',
    114. address: '上海市普'
    115. },
    116. {
    117. date: '2016-05-02',
    118. name: '王小虎',
    119. address: '上海市普陀'
    120. },
    121. {
    122. date: '2016-05-02',
    123. name: '王小虎',
    124. address: '上海市普陀'
    125. },
    126. {
    127. date: '2016-05-04',
    128. name: '王小虎',
    129. address: '上海市普'
    130. }
    131. ];
    132. this.$nextTick(() => {
    133. this.handleTableResize();
    134. });
    135. }
    136. }
    137. };
    138. script>
    139. <style lang="scss" scoped>
    140. .container-table {
    141. height: 70vh;
    142. width: 890px;
    143. background-color: #fff;
    144. .table-box {
    145. height: 70%;
    146. width: 100%;
    147. }
    148. }
    149. ::v-deep .el-table .el-table__body--striped .el-table__row:nth-child(even) {
    150. background-color: #f7f7f7; /* 设置偶数行的背景色 */
    151. }
    152. .tablebox {
    153. border: 1px solid #c0c0c0;
    154. }
    155. /deep/ .el-table::after {
    156. width: 0;
    157. }
    158. /deep/ .el-table::before {
    159. height: 0;
    160. }
    161. // 这是关键,设置表格的每一行的高度,必须要固定死,如果内容过多可以设置show-overflow-tooltip
    162. .el-table /deep/ .el-table__row {
    163. height: 50px;
    164. }
    165. /deep/ .el-table tbody tr td:nth-child(5),
    166. /deep/ .el-table thead tr th:nth-child(5) {
    167. border-right: none;
    168. }
    169. /deep/ table thead tr:first-of-type th:nth-child(2) {
    170. border-right: none;
    171. }
    172. style>

  • 相关阅读:
    ArrayList与LinkedList区别
    基于FPGA的模板匹配红外目标跟踪算法设计
    【wps】记录
    【Flink】事务型Sink连接器、kafka连接器、写入到redis、mysql
    C#下使用IronPython来实现热更新
    Java实现负载均衡算法--轮询和加权轮询
    东莞松山湖数据中心|莞服务器托管的优势
    CANoe-vTESTstudio之State Diagram编辑器(元素介绍)
    新品上市的软文怎么写?品宣软文写作要注意以下几点
    AI面试常见题目整理
  • 原文地址:https://blog.csdn.net/qq_44278289/article/details/134372312