一、概述
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
引入
-
import Vue
from
'vue';
-
import Plugin
from
'v-fit-columns';
-
Vue.use(Plugin);
使用示例:
-
<el-
table v-fit-columns>
-
<el-
table-column label=
"No."
type=
"index" class-name=
"leave-alone"></el-
table-column>
-
<el-
table-column label=
"Name" prop=
"name"></el-
table-column>
-
<el-
table-column label=
"Age" prop=
"age"></el-
table-column>
-
</el-
table>
在el-table后面加v-fit-columns即可,其他的都不需要改。
先来看一下原始的table效果:
发现内容过多,已经开始换行了。
下面使用v-fit-columns
test.vue
-
<template>
-
<div>
-
<el-table v-fit-columns
-
:data=
"tableData"
-
border
-
style=
"width: 100%">
-
<el-table-column
-
prop=
"date"
-
label=
"日期">
-
</el-table-column>
-
<el-table-column
-
prop=
"name"
-
label=
"姓名">
-
</el-table-column>
-
<el-table-column
-
prop=
"phone"
-
label=
"手机号码">
-
</el-table-column>
-
<el-table-column
-
prop=
"address"
-
label=
"地址">
-
</el-table-column>
-
<el-table-column
-
prop=
"describe"
-
label=
"描述">
-
</el-table-column>
-
</el-table>
-
</div>
-
</template>
-
-
<script>
-
import Vue
from
'vue';
-
import Plugin
from
'v-fit-columns';
-
Vue.use(Plugin);
-
export
default {
-
data() {
-
return {
-
tableData: [{
-
date:
'2016-05-02',
-
name:
'王小虎',
-
phone:
12345678910,
-
address:
'上海市普陀区金沙江路 1518 弄',
-
describe:
'松江区,位于上海市西南部,历史文化悠久,有着“上海之根” 的称呼。位于黄浦江上游,东与闵行区、奉贤区为邻,南、西南与金山区交界,西、北与青浦区接壤'
-
-
}, {
-
date:
'2016-05-04',
-
name:
'王小虎',
-
phone:
12345678910,
-
address:
'上海市普陀区金沙江路 1517 弄FDSA',
-
describe:
'徐汇区,上海市辖区,位于上海中心城区的西南部,东北侧与黄浦区毗邻,东临黄浦江,与浦东新区隔江相望,西与闵行区分界,北与静安区、长宁区接壤。',
-
}, {
-
date:
'2016-05-01',
-
name:
'王小虎',
-
phone:
12345678910,
-
address:
'上海市普陀区金沙江路 1519 弄54YGFDSF',
-
describe:
'浦东新区为上海市的一个市辖区,因地处黄浦江东而得名。浦东南与奉贤区、闵行区两区接壤,西与徐汇区、黄浦区、虹口区、杨浦区、宝山区五区隔黄浦江相望,北与崇明区隔长江相望;地势东南高,西北低,气温偏高、降水偏多、日照时数偏少'
-
}, {
-
date:
'2016-05-03',
-
name:
'王小虎',
-
phone:
12345678910,
-
address:
'上海市普陀区金沙江路 1516 弄',
-
describe:
'黄浦区,隶属于上海市,地处黄浦江和苏州河合流处的西南端。北起苏州河,东、南濒黄浦江,西至成都北路、延安中路、陕西南路、肇嘉浜路、瑞金南路。'
-
}]
-
}
-
},
-
methods:{
-
}
-
}
-
</script>
-
<style scoped>
-
</style>
刷新页面,效果如下:
可以看到,table下面出现了一个滚动条,可以向左向右拉动。
本文参考链接: