当前位置:   article > 正文

Vue ElementUI el-table 表头不换行且宽度自适应

el-table 表头不换行

参考 此篇文章 ,在此记录自己的理解和使用。

API 

el-table 设置属性 render-header

 代码

  1. <template>
  2. <div>
  3. <el-table :data="tableData" style="width: 100%" height="250">
  4. <el-table-column v-for="col of columns" :key="col.prop"
  5. :prop="col.prop" :label="col.label"
  6. align="center" header-align="center"
  7. show-overflow-tooltip
  8. :render-header="renderHeader"></el-table-column>
  9. </el-table>
  10. </div>
  11. </template>
  12. <script>
  13. export default {
  14. data() {
  15. return {
  16. columns: [
  17. {
  18. label: '日期',
  19. prop: 'date'
  20. },
  21. {
  22. label: '姓名',
  23. prop: 'name'
  24. },
  25. {
  26. label: '省份',
  27. prop: 'province'
  28. },
  29. {
  30. label: '市区',
  31. prop: 'city'
  32. },
  33. {
  34. label: '地址',
  35. prop: 'address'
  36. },
  37. {
  38. label: '邮编',
  39. prop: 'zip'
  40. },
  41. {
  42. label: '这是测试字段01',
  43. prop: 'test01'
  44. },
  45. {
  46. label: '这是测试字段02',
  47. prop: 'test02'
  48. },
  49. {
  50. label: '这是测试字段03',
  51. prop: 'test03'
  52. },
  53. {
  54. label: '这是测试字段04',
  55. prop: 'test04'
  56. }
  57. ],
  58. tableData: [
  59. {
  60. date: '2016-05-03',
  61. name: '王小虎',
  62. province: '上海',
  63. city: '普陀区',
  64. address: '上海市普陀区金沙江路 1518 弄',
  65. zip: 200333,
  66. test01: '这是一条测试数据.这是一条测试数据.这是一条测试数据.',
  67. test02: '这是一条测试数据.这是一条测试数据.这是一条测试数据.',
  68. test03: '这是一条测试数据.这是一条测试数据.这是一条测试数据.',
  69. test04: '这是一条测试数据.这是一条测试数据.这是一条测试数据.'
  70. }, {
  71. date: '2016-05-02',
  72. name: '王小虎',
  73. province: '上海',
  74. city: '普陀区',
  75. address: '上海市普陀区金沙江路 1518 弄',
  76. zip: 200333,
  77. test01: '测试',
  78. test02: '测试',
  79. test03: '测试',
  80. test04: '测试'
  81. }, {
  82. date: '2016-05-04',
  83. name: '王小虎',
  84. province: '上海',
  85. city: '普陀区',
  86. address: '上海市普陀区金沙江路 1518 弄',
  87. zip: 200333,
  88. test01: '测试',
  89. test02: '测试',
  90. test03: '测试',
  91. test04: '测试'
  92. }, {
  93. date: '2016-05-01',
  94. name: '王小虎',
  95. province: '上海',
  96. city: '普陀区',
  97. address: '上海市普陀区金沙江路 1518 弄',
  98. zip: 200333,
  99. test01: '测试',
  100. test02: '测试',
  101. test03: '测试',
  102. test04: '测试'
  103. }, {
  104. date: '2016-05-08',
  105. name: '王小虎',
  106. province: '上海',
  107. city: '普陀区',
  108. address: '上海市普陀区金沙江路 1518 弄',
  109. zip: 200333,
  110. test01: '测试',
  111. test02: '测试',
  112. test03: '测试',
  113. test04: '测试'
  114. }, {
  115. date: '2016-05-06',
  116. name: '王小虎',
  117. province: '上海',
  118. city: '普陀区',
  119. address: '上海市普陀区金沙江路 1518 弄',
  120. zip: 200333,
  121. test01: '测试',
  122. test02: '测试',
  123. test03: '测试',
  124. test04: '测试'
  125. }, {
  126. date: '2016-05-07',
  127. name: '王小虎',
  128. province: '上海',
  129. city: '普陀区',
  130. address: '上海市普陀区金沙江路 1518 弄',
  131. zip: 200333,
  132. test01: '测试',
  133. test02: '测试',
  134. test03: '测试',
  135. test04: '测试'
  136. }
  137. ]
  138. }
  139. },
  140. methods: {
  141. // 表头部重新渲染
  142. renderHeader(h, { column, $index }) {
  143. // 新建一个 span
  144. let span = document.createElement('span');
  145. // 设置表头名称
  146. span.innerText = column.label;
  147. // 临时插入 document
  148. document.body.appendChild(span);
  149. // 重点:获取 span 最小宽度,设置当前列,注意这里加了 20,字段较多时还是有挤压,且渲染后的 div 内左右 padding 都是 10,所以 +20 。(可能还有边距/边框等值,需要根据实际情况加上)
  150. column.minWidth = span.getBoundingClientRect().width + 20;
  151. // 移除 document 中临时的 span
  152. document.body.removeChild(span);
  153. return h('span', column.label);
  154. }
  155. }
  156. }
  157. </script>

知识点

1. 代码第 8 行,设置方法 renderHeader;

2. 代码第 142 - 154 行,注释中详细说明设置表头宽度;

3. 代码第 6 行,表头和单元格都居中显示;

4. 代码第 7 行,当内容过长被隐藏时显示 tooltip,可参考此篇详细说明

效果

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/117879
推荐阅读
相关标签