vue+Element-ui的el-table的多級內(nèi)容渲染問題
vue+Element-ui的el-table的多級內(nèi)容渲染
將多層內(nèi)容渲染到表格里面
平常的表格是一個對象里面的數(shù)據(jù)渲染成一行,對象里面的key就是表格的label,如果對象里面還有對象數(shù)組那該怎么去渲染,如渲染下面的數(shù)據(jù),將一個對象渲染成一行數(shù)據(jù),和平常的table表格的數(shù)據(jù)渲染不一樣,這個不能直接渲染出來,需要加第三方的label來渲染數(shù)據(jù)
tableData: [
{
name: 'Huawei P40',
properties: [
{
description: '顏色',
value: '紅色'
},
{
description: '內(nèi)存',
value: '128G'
}
]
},
{
name: '小米10',
properties: [
{
description: '顏色',
value: '黑色'
},
{
description: '內(nèi)存',
value: '128G'
}
]
}
]
代碼如下,另外加一個columnIndex數(shù)組,用來存儲數(shù)據(jù)里面的屬性的key
<template>
<el-table :data="tableData" border>
<el-table-column label="手機">
<template slot-scope="scope">
<span>{{scope.row.name}}</span>
</template>
</el-table-column>
<el-table-column v-for="(item, index) in columnIndex" :key="index" :label="item">
<template slot-scope="scope">
<span>{{scope.row.properties[index].value}}</span>
</template>
</el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
// 有兩層數(shù)據(jù),渲染表格
columnIndex: ['顏色','內(nèi)存'],
tableData: [
{
name: 'Huawei P40',
properties: [
{
description: '顏色',
value: '紅色'
},
{
description: '內(nèi)存',
value: '128G'
}
]
},
{
name: '小米10',
properties: [
{
description: '顏色',
value: '黑色'
},
{
description: '內(nèi)存',
value: '128G'
}
]
}
]
}
}
}
</script>
<style>
</style>
效果圖:
可以看到,properties里面的數(shù)據(jù)也渲染到表格里面了

Element UI 多級表格渲染
// TableColumn.js
function renderColumn(h, column){
return h{
'el-table-column',
{
props:{
align:'center',
...column
}
},
column&&column.children&&column.children.map(c=> renderColumn(h, c))
}
}
export default {
functional: true,
props: {
columns: {
type:Array,
default: ()=>[]
}
},
render(h, ctx) {
return ctx.props.columns.map(column => renderColumn(h, column ))
}
}// Table.vue
<template>
<el-table
ref="elTable"
:data="list"
stripe
border
height="100%"
>
</el-table>
</template>
<script>
import TableColumn from './TableColumn.js'
const columns = [
{
label:'一級',
children:[
{
label:'二級一',
align:'center',
prop:'name1'
},
{
label:'二級二',
children:[
{
label:'三級一',
align:'center',
prop:'name2'
},
{
label:'三級二',
align:'center',
prop:'name3'
}
]
}
]
}
]
export default {
name: "Table",
data() {
return {
list:[]
}
}
}
</script>總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
一文搞懂Vue3中toRef和toRefs函數(shù)的使用
這篇文章主要為大家介紹了Vue3中toRef和toRefs函數(shù)的使用方法,文中通過示例為大家進行了詳細的講解,感興趣的小伙伴可以跟隨小編一起學習一下2022-07-07
詳解利用 Vue.js 實現(xiàn)前后端分離的RBAC角色權(quán)限管理
本篇文章主要介紹了利用 Vue.js 實現(xiàn)前后端分離的RBAC角色權(quán)限管理,非常具有實用價值,需要的朋友可以參考下2017-09-09
Vue中的watch是什么以及watch和computed的區(qū)別
這篇文章主要介紹了Vue中的watch是什么以及watch和computed的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06

