一、EL-Table列的v-show属性展示与隐藏
EL-Table组件允许通过v-show属性来控制某列的显隐状态,在某些特定需求场景下使用该属性可以完成很多自定义的功能。例如,我们需要在EL-Table中展示一份学生信息表格,其中有一列是学生成绩,而这个成绩可能不是每个人都有,那么我们就可以通过v-show只显示拥有成绩的学生成绩列,隐藏没有成绩数据的列。下面是示例代码:
<el-table-column label="成绩" prop="score" v-show="showScore"></el-table-column>
其中,showScore是一个布尔型变量,用于控制该列是否显示
二、EL-Table隐藏表头
在某些情况下,我们需要在EL-Table中隐藏某一列的表头,例如我们在完成一个统计表格时,不需要某些列的表头,只需要展示内容即可,此时可以使用EL-Table的show-header属性来控制表头的显隐状态,如以下代码:
<el-table-column label="学号" prop="id" :show-header="false"></el-table-column>
可以看到,通过show-header属性的设置,可以隐藏表头
三、使用Element UI隐藏列组件
Element UI提供了一个column-chooser组件,该组件可以让用户自定义选择要显示的列,用户可以通过checkbox组件来勾选对应的列名,来过滤掉不要显示的列。下面是简单的实现方式:
<template>
<el-table
// ...
:column-controller="true">
<el-table-column
// ...
:order="1"
label="序号"></el-table-column>
<el-table-column
label="姓名"
prop="name"></el-table-column>
<el-table-column
label="性别"
prop="sex"></el-table-column>
<el-table-column
label="电话"
prop="phone"></el-table-column>
<el-table-column
label="地区"
prop="location"></el-table-column>
<el-table-column
label="操作"
prop="action"></el-table-column>
<column-chooser></column-chooser>
</el-table>
</template>
通过使用column-chooser组件,我们将EL-Table的列管理功能交给了用户,可以实现一定程度的隐藏列 asp。需要注意的是,该功能需要引入Element UI的column-chooser组件库。
四、EL-Table合并列
在一些特定场景下,我们可能需要将EL-Table中的相邻多列合并成一列,以达到更好的显示效果。例如,在展示一组成员信息时,可能需要将“姓名”和“手机号”这两个相邻的列合并成一个新的列“联系方式”。我们可以通过EL-Table的slot-scope属性实现列合并功能。下面是示例代码:
<el-table-column label="联系方式" :span-method="handleSpanMethod">
<template scope="scope">
<span v-if="scope.row.show">{{ scope.row.tel }}</span>
</template>
</el-table-column>
以上代码中,关键是span-method属性,如果span-method函数返回一个数组,那么代表需要将当前列合并到前一个元素中,如果返回一个对象,则代表合并到一个指定的行,具体代码如下:
handleSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (row.show) {
return {
rowspan: row['span'],
colspan: 1
};
} else {
return {
rowspan: 0,
colspan: 0
};
}
} else if (columnIndex === 1) {
if (row.show) {
return {
rowspan: row['span'],
colspan: 1
};
} else {
return {
rowspan: 0,
colspan: 0
};
}
}
}
五、EL-Table隐藏竖滚动条
在某一列元素较多的情况下,EL-Table会出现竖直滚动条,如果需求不显示滚动条,可以通过设置Table的show-scrollbar属性实现。代码如下:
<el-table :data="tableData" :show-scrollbar="false"></el-table>
六、EL-Table列宽的调整
在日常的开发工作中,我们经常需要针对每一列的数据来调整该列的宽度,让数据的展示更合理。这个时候EL-Table提供了多种方法来控制列的宽度大小,例如通过设置列的min-width或者width属性来精确控制列的宽度。代码如下:
<el-table-column
label="手机"
prop="phone"
:width="150"></el-table-column>
可以看到,在上面的示例代码中,我们设置了EL-Table中“手机”列的宽度为“150”,从而达到了我们期望的效果。
七、EL-Table超长隐藏
在实际的生产过程中,我们经常需要将不合法或者敏感的信息进行超长隐藏。在EL-Table中,我们可以通过CSS、slot和watch属性来实现。代码如下:
<style>
.el-table__body td .hide-text {
max-width: 0;
overflow: hidden;
display: inline-block;
vertical-align: middle;
}
</style>
<el-table-column label="名称">
<template scope="scope">
<div :class="{'hide-text': scope.row.isHide}">
{{ scope.row.name }}
</div>
</template>
</el-table-column>
以上代码中,我们使用了样式表将超长内容隐藏,并且在el-table-column中使用了template标签来定义行数据,通过watch属性来判断是否需要隐藏数据。
八、EL-Table列排序
在某些情况下,我们需要针对某一列进行排序,让表格数据更有序。在EL-Table中,我们可以通过给列绑定sortable属性来设置可排序的列。代码如下:
<el-table-column
prop="date"
label="事件"
sortable="custom"
:sort-method="customSort"></el-table-column>
以上代码中,我们使用sortable属性来启用该列的排序功能,并且通过sort-method属性来配置自定义的排序方式customSort。
九、EL-Table固定列错位
在EL-Table中,如果我们需要固定表头,需要给EL-Table设置属性use-fixed-header,同时我们也可以使用fixed-columns属性来指定固定列的个数。如果我们使用错位的方式来固定表头,需要使用max-height来控制固定列的显示高度,从而实现错位效果。代码如下:
<el-table
:data="tableData"
:height="400"
:max-height="300"
:use-fixed-header="true">
<el-table-column
fixed
prop="date"
label="日期"></el-table-column>
<el-table-column
fixed
prop="name"
label="姓名"></el-table-column>
<el-table-column
prop="address"
label="地址"></el-table-column>
</el-table>
十、EL-Table拖拽列选取
在一些特殊情况下,我们希望用户可以通过拖拽列选取的方式来选择对应的数据行,EL-Table提供了一些自定义的拖拽事件,可以实现这一需求。
首先,我们需要引入column-draggable.js 文件。
import '@/utils/column-draggable.js';
需要注意的是,column-draggable.js的代码需要放置在EL-Table的代码后面
其次,在EL-Table的mounted方法中注册drag-handle回调函数:
mounted() {
let dragHandlers= document.getElementsByClassName('drag-handle');
let len = dragHandlers.length
for (let i = 0; i < len; i++) {
dragHandlers[i].addEventListener('mousedown', this.handleDragStart, false)
dragHandlers[i].addEventListener('touchstart', this.handleDragStart, false)
}
}
最后,实现handleDragStart方法实现功能,如下面示例代码:
handleDragStart(e) {
// 鼠标左键,如果是document,比如el-dialog,去掉
if (e.button !== 0 || (e.target.tagName === 'INPUT' && e.type === 'mousedown' && !e.target.checked) || !this.$el.contains(e.target)) return
const dragState = {
el: e.currentTarget.parentNode,
rect: e.currentTarget.parentNode.getBoundingClientRect(),
startX: e.clientX || e.touches[0].pageX,
column: null,
}
if (dragState.el.classList.contains('is-leaf')) {
dragState.column = dragState.el
} else {
dragState.column = dragState.el.querySelector('.is-leaf')
}
}
至此,我们可以实现列拖拽选择功能。
总结
通过以上几种方式,我们可以实现EL-Table隐藏列的多种应用方式,从而完成表格样式的定制和功能的优化。