vue实现多级表头
Vue实现多级表头的方案
使用Element UI的el-table组件
Element UI的表格组件原生支持多级表头,通过嵌套el-table-column即可实现。例如:
<el-table :data="tableData">
<el-table-column prop="date" label="日期" width="180"></el-table-column>
<el-table-column label="配送信息">
<el-table-column prop="name" label="姓名" width="180"></el-table-column>
<el-table-column label="地址">
<el-table-column prop="province" label="省份" width="120"></el-table-column>
<el-table-column prop="city" label="市区" width="120"></el-table-column>
</el-table-column>
</el-table-column>
</el-table>
动态生成多级表头
当表头数据需要动态生成时,可以通过递归组件实现:
// 递归组件
Vue.component('multi-header', {
props: ['columns'],
template: `
<template v-for="col in columns">
<el-table-column
v-if="!col.children"
:key="col.prop"
:prop="col.prop"
:label="col.label">
</el-table-column>
<el-table-column v-else :key="col.label" :label="col.label">
<multi-header :columns="col.children"></multi-header>
</el-table-column>
</template>
`
})
自定义渲染复杂表头
对于需要自定义样式的复杂表头,可以使用render-header属性:
columns: [{
label: '自定义表头',
renderHeader: (h, { column }) => {
return h('div', [
h('span', '主标题'),
h('div', { style: 'color: #999' }, '副标题')
])
}
}]
使用VxeTable组件库
VxeTable提供了更灵活的多级表头配置方式:
columns: [
{ field: 'name', title: '名称' },
{
title: '详细信息',
children: [
{ field: 'age', title: '年龄' },
{ field: 'address', title: '地址' }
]
}
]
处理表头合并与样式
通过CSS和表头配置实现特殊样式:
/* 表头行样式 */
.el-table__header tr th {
background-color: #f5f7fa;
}
/* 多级表头边框处理 */
.el-table .el-table-column--nested .el-table__header-wrapper {
border-right: 1px solid #ebeef5;
}
响应式表头处理
监听窗口大小变化动态调整表头:
mounted() {
window.addEventListener('resize', this.handleResize)
},
methods: {
handleResize() {
this.$nextTick(() => {
this.$refs.table.doLayout()
})
}
}






