对el-table列表表格某个字段数据进行处理 如果数据过长超过了指定的宽度 鼠标移入事件就用el-pop over 但如果内容全部展示就不需要移入事件
时间: 2024-03-19 09:43:11 浏览: 66
鼠标调整表格的宽度
可以通过计算表格列的内容宽度,然后动态设置单元格的样式来实现这个需求。具体步骤如下:
1. 在表格列的 `formatter` 函数中,对该列的数据进行处理,如果数据过长,则返回一个带有 `title` 属性的元素,在 `title` 属性中保存完整的数据,例如:
```
columns: [
{
prop: 'name',
label: '名称',
formatter: row => {
if (row.name.length > 10) {
return `<div title="${row.name}">${row.name.substr(0, 10)}...</div>`;
} else {
return row.name;
}
}
},
// ...
]
```
2. 在表格单元格的 `cell-class-name` 属性中,根据单元格的内容宽度设置样式,例如:
```
<el-table-column
prop="name"
label="名称"
:cell-class-name="handleClassName"
:formatter="handleFormatter"
></el-table-column>
methods: {
handleClassName({ row, column, rowIndex, columnIndex }) {
const content = row[column.property];
if (content.length > 10) {
const cellWidth = this.$refs.tableRef.$el.querySelector('colgroup').children[columnIndex].style.width;
const contentWidth = this.getTextWidth(content);
if (Number(cellWidth.replace('px', '')) < contentWidth) {
return 'over-hidden';
}
}
},
// ...
}
```
其中,`handleClassName` 方法中,通过 `getTextWidth` 方法获取单元格内容的宽度,然后与单元格宽度进行比较,如果单元格宽度小于内容宽度,则返回一个自定义的样式 `over-hidden`,该样式用于隐藏超出部分。否则,不返回样式,单元格内容全部展示。
3. 在需要显示完整内容的单元格上添加 `mouseenter` 事件,显示 `el-popover`,例如:
```
<el-table-column
prop="name"
label="名称"
:cell-class-name="handleClassName"
:formatter="handleFormatter"
>
<template slot-scope="{ row }">
<div
v-if="row.name.length > 10"
@mouseenter="handleMouseEnter(row.name)"
>
{{ row.name }}
</div>
<div v-else>{{ row.name }}</div>
</template>
</el-table-column>
methods: {
// ...
handleMouseEnter(content) {
this.$nextTick(() => {
this.$refs.popoverRef.$refs.popover.doShow();
this.$refs.popoverRef.$refs.popover.$el.querySelector('.el-popover__content').innerText = content;
});
},
// ...
}
```
其中,`handleMouseEnter` 方法中,通过 `$refs.popoverRef.$refs.popover.doShow()` 方法显示 `el-popover`,并将超出部分的内容作为参数传入,然后在 `el-popover` 的 `mouseenter` 事件中设置内容,如果单元格内容未超出,则不显示 `el-popover`。
最后,需要在样式中定义 `over-hidden` 样式,用于隐藏超出部分的内容,例如:
```
.over-hidden {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
```
阅读全文