el-table动态生成列(多级表头)

892 阅读1分钟

el-table动态生成列(多级表头)

先看效果吧

table-column.gif 有时候我们需要通过时间区间去检索,所以这里的时间部分都是动态读取的。

那么我们需要怎么做呢?

数据格式

tableList: [
        {
          studentId: 1,
          studentName: "张三",
          date: {
            "2023-02-18": "83",
            "2023-02-19": "99",
            "2023-02-20": "91",
            "2023-02-21": "93",
            "2023-02-22": "82",
            "2023-02-23": "100",
            "2023-02-24": "100",
            "2023-02-25": "92",
            "2023-02-26": "100",
            "2023-02-27": "87",
            "2023-02-28": "100",
            "2023-02-29": "100",
          },
        },
       ......
       ]

这里的date我是写死的,要是后台获取基本也是相同的。

有数据、有需求那么我们就开始实现吧!!!

1.第一步:肯定先取列头

this.colHeadList = Object.keys(this.tableList[0].date);

2.第二步,生成多级列表,可参考element官方文档

<el-table-column label="时间" align="center">
    <el-table-column
      align="center"
      width="130"
      v-for="item in colHeadList"
      :key="item"
      :label="item"
    >
    </el-table-column>
</el-table-column>

有些人到这里就不会写了,不知道怎么取出来数据,很简单,这里的item就是列头,table的行每次渲染都是单独的唯一的,所以我们可以使用插槽取定位到对应的数据

3.第三步,取值

<el-table-column label="时间" align="center">
    <el-table-column
      align="center"
      width="130"
      v-for="item in colHeadList"
      :key="item"
      :label="item"
    >
      <template slot-scope="scope">
        <span>{{ scope.row.date[item] }}</span>
      </template>
    </el-table-column>
</el-table-column>

这样我们就可以实现上述想要的效果了。