- 需求:vue使用el-table时有些单元格内容比较长,希望可以不换行全部显示;
- 思路:根据返回数据宽度,动态设置表格最大宽度;
- 最终效果:

<el-table
:data="tableData"
style="width: 100%">
<el-table-column prop="date" label="日期" width="150"> </el-table-column>
<el-table-column prop="name" label="姓名" width="150"> </el-table-column>
<el-table-column prop="sex" label="性别" width="130"> </el-table-column>
<el-table-column prop="age" label="年龄" width="120"> </el-table-column>
<el-table-column
prop="address"
label="地址"
:width="flexColumnWidth(list, 'address')"
>
</el-table-column>
</el-table>
<script>
export default {
data() {
return {
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}]
}
},
methods: {
flexColumnWidth(arr1, name, flag = "max") {
let columnContent = "";
if (!arr1 || !arr1.length || arr1.length === 0 || arr1 === undefined) {
return "80px";
}
if (flag === "equal") {
for (let i = 0; i < arr1.length; i++) {
if (arr1[i][name].length > 0) {
columnContent = arr1[i][name];
break;
}
}
} else {
let index = 0;
for (let i = 0; i < arr1.length; i++) {
if (arr1[i][name] === null) {
return;
}
if (arr1[i][name] === undefined) {
arr1[i][name] = "";
}
const now_temp = arr1[i][name] + "";
const max_temp = arr1[index][name] + "";
if (now_temp.length > max_temp.length) {
index = i;
}
}
columnContent = arr1[index][name];
}
let flexWidth = 0;
for (const char of columnContent) {
if ((char >= "A" && char <= "Z") || (char >= "a" && char <= "z")) {
flexWidth += 8;
} else if (char >= "\u4e00" && char <= "\u9fa5") {
flexWidth += 15;
} else {
flexWidth += 8;
}
}
if (flexWidth < 80) {
flexWidth = 80;
}
flexWidth += 20;
return flexWidth;
},
}
}
</script>