el-table prop为对象数组时,让该数据多行展示,并合并其他属性
时间: 2023-12-17 17:05:55 浏览: 81
可以使用`row-span`和`col-span`属性来实现多行展示和合并其他属性。
首先,在`<el-table>`中设置`row-key`属性为对象数组中每个对象的唯一标识符。
然后,在表头设置需要合并的列的`col-span`属性,值为需要合并的列数。例如,如果要将第一列和第二列合并为一列,可以这样写:
```html
<el-table :data="tableData" :row-key="row => row.id">
<el-table-column
prop="name"
label="姓名"
:row-span="2"
:col-span="2">
</el-table-column>
<el-table-column
prop="age"
label="年龄">
</el-table-column>
<el-table-column
prop="gender"
label="性别">
</el-table-column>
</el-table>
```
接下来,在数据中设置需要多行展示的列的`row-span`属性,值为需要展示的行数。例如,如果要让第一行和第二行都展示“张三”的姓名,可以这样写:
```js
tableData: [
{
id: 1,
name: '张三',
age: 18,
gender: '男',
rowSpanName: 2 // 需要多行展示的列的属性名为 rowSpanName
},
{
id: 2,
age: 20,
gender: '女'
},
{
id: 3,
name: '李四',
age: 25,
gender: '男'
},
{
id: 4,
name: '王五',
age: 30,
gender: '女'
}
]
```
最后,需要编写一个自定义的单元格渲染函数,用来动态设置需要合并的单元格的`row-span`和`col-span`属性。例如,如果要将第一列和第二列合并为一列,可以这样写:
```js
{
prop: 'name',
label: '姓名',
render: (h, { row, column, rowIndex, columnIndex }) => {
if (columnIndex === 0) {
return {
children: row.rowSpanName ? row.name : '',
attrs: {
rowSpan: row.rowSpanName || 1,
colSpan: 2
}
}
} else {
return null
}
}
}
```
在上面的渲染函数中,首先判断当前渲染的单元格是否是第一列,如果是,则根据当前行的`rowSpanName`属性判断需要展示多少行。然后,设置该单元格的`row-span`和`col-span`属性。如果不是第一列,则返回`null`,表示该单元格不需要进行合并。
阅读全文