飞道的博客

ElementUI 实现el-table 列宽自适应

279人阅读  评论(0)

一、概述

Element UI 是 PC 端比较流行的 Vue.js UI 框架,它的组件库基本能满足大部分常见的业务需求。但有时候会有一些定制性比较高的需求,组件本身可能没办法满足。最近在项目里就碰到了。

很多页面都需要用到表格组件el-table。如果没有给el-table-column指定宽度,默认情况下会平均分配给剩余的列。在列数比较多的情况,如果el-table宽度限定在容器内,单元格里的内容就会换行。强制不换行,内容要么在单元格内滚动,要么就会溢出或被截断。

产品想要的效果是:内容保持单行显示,列间距保持一致,表格超出容器允许水平滚动。el-table-column是支持设置固定宽度的,在内容宽度可预知的情况下,也能满足这个需求。问题就在于如何让列宽动态适应内容的宽度。在官方文档也没找到这样的选项,应该是组件本身不支持。

二、技术实现

通过插件v-fit-columns即可实现,列宽自适应。

安装插件

npm install v-fit-columns --save

引入


    
  1. import Vue from 'vue';
  2. import Plugin from 'v-fit-columns';
  3. Vue.use(Plugin);

使用示例:


    
  1. <el- table v-fit-columns>
  2. <el- table-column label= "No." type= "index" class-name= "leave-alone"></el- table-column>
  3. <el- table-column label= "Name" prop= "name"></el- table-column>
  4. <el- table-column label= "Age" prop= "age"></el- table-column>
  5. </el- table>

在el-table后面加v-fit-columns即可,其他的都不需要改。

先来看一下原始的table效果:

发现内容过多,已经开始换行了。

下面使用v-fit-columns

test.vue


     
  1. <template>
  2. <div>
  3. <el-table v-fit-columns
  4. :data= "tableData"
  5. border
  6. style= "width: 100%">
  7. <el-table-column
  8. prop= "date"
  9. label= "日期">
  10. </el-table-column>
  11. <el-table-column
  12. prop= "name"
  13. label= "姓名">
  14. </el-table-column>
  15. <el-table-column
  16. prop= "phone"
  17. label= "手机号码">
  18. </el-table-column>
  19. <el-table-column
  20. prop= "address"
  21. label= "地址">
  22. </el-table-column>
  23. <el-table-column
  24. prop= "describe"
  25. label= "描述">
  26. </el-table-column>
  27. </el-table>
  28. </div>
  29. </template>
  30. <script>
  31. import Vue from 'vue';
  32. import Plugin from 'v-fit-columns';
  33. Vue.use(Plugin);
  34. export default {
  35. data() {
  36. return {
  37. tableData: [{
  38. date: '2016-05-02',
  39. name: '王小虎',
  40. phone: 12345678910,
  41. address: '上海市普陀区金沙江路 1518 弄',
  42. describe: '松江区,位于上海市西南部,历史文化悠久,有着“上海之根” 的称呼。位于黄浦江上游,东与闵行区、奉贤区为邻,南、西南与金山区交界,西、北与青浦区接壤'
  43. }, {
  44. date: '2016-05-04',
  45. name: '王小虎',
  46. phone: 12345678910,
  47. address: '上海市普陀区金沙江路 1517 弄FDSA',
  48. describe: '徐汇区,上海市辖区,位于上海中心城区的西南部,东北侧与黄浦区毗邻,东临黄浦江,与浦东新区隔江相望,西与闵行区分界,北与静安区、长宁区接壤。',
  49. }, {
  50. date: '2016-05-01',
  51. name: '王小虎',
  52. phone: 12345678910,
  53. address: '上海市普陀区金沙江路 1519 弄54YGFDSF',
  54. describe: '浦东新区为上海市的一个市辖区,因地处黄浦江东而得名。浦东南与奉贤区、闵行区两区接壤,西与徐汇区、黄浦区、虹口区、杨浦区、宝山区五区隔黄浦江相望,北与崇明区隔长江相望;地势东南高,西北低,气温偏高、降水偏多、日照时数偏少'
  55. }, {
  56. date: '2016-05-03',
  57. name: '王小虎',
  58. phone: 12345678910,
  59. address: '上海市普陀区金沙江路 1516 弄',
  60. describe: '黄浦区,隶属于上海市,地处黄浦江和苏州河合流处的西南端。北起苏州河,东、南濒黄浦江,西至成都北路、延安中路、陕西南路、肇嘉浜路、瑞金南路。'
  61. }]
  62. }
  63. },
  64. methods:{
  65. }
  66. }
  67. </script>
  68. <style scoped>
  69. </style>
View Code

刷新页面,效果如下:

 可以看到,table下面出现了一个滚动条,可以向左向右拉动。

本文参考链接:

https://www.cnblogs.com/lzkwin/p/13575805.html


转载:https://blog.csdn.net/shykevin/article/details/116474894
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场