一、概述
一般寫table時,列都是固定。現有業務需求,列是不固定的。根據api返回的數據,進行動態渲染。
官方table示例,鏈接如下:
https://element.eleme.cn/#/zh-CN/component/table
二、實現
在此基礎上,增加tableHeader 變量,用來動態渲染。
test.vue

<template> <div class="root"> <el-table :data="tableData" style="width: 100%" :fit='true' :default-sort="{prop: 'date', order: 'descending'}" > <el-table-column :prop="index" :label="item" sortable show-overflow-tooltip v-for="(item, index) in tableHeader" :key="index"> </el-table-column> </el-table> </div> </template> <script> export default { name: "test", data() { return { tableHeader: { date: "日期", name: "姓名", address: "地址", }, tableData: [{ date: '2016-05-02', name: '王小虎', address: '上海市普陀區金沙江路 1518 弄', }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀區金沙江路 1517 弄', }, { date: '2016-05-01', name: '王小虎', address: '上海市普陀區金沙江路 1519 弄', }, { date: '2016-05-03', name: '王小虎', address: '上海市普陀區金沙江路 1516 弄', }] } }, methods: { formatter(row, column) { return row.address; } } } </script> <style scoped> .root { margin: 20px 25px 0px 25px; } </style>
效果如下:
說明:
修改tableHeader 和tableData,注意對應關系即可。
:fit='true' 寬度自適應
sortable 排序
show-overflow-tooltip 當內容過長被隱藏時顯示
再增加2列,修改修改tableHeader 和tableData

<template> <div class="root"> <el-table :data="tableData" style="width: 100%" :fit='true' :default-sort="{prop: 'date', order: 'descending'}" > <el-table-column :prop="index" :label="item" sortable show-overflow-tooltip v-for="(item, index) in tableHeader" :key="index"> </el-table-column> </el-table> </div> </template> <script> export default { name: "test", data() { return { tableHeader: { date: "日期", name: "姓名", address: "地址", age:"年齡", phone:"電話", }, tableData: [{ date: '2016-05-02', name: '王小虎', address: '上海市普陀區金沙江路 1518 弄', age:18, phone:"12345678910", }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀區金沙江路 1517 弄', age:19, phone:"12345678911", }, { date: '2016-05-01', name: '王小虎', address: '上海市普陀區金沙江路 1519 弄', age:20, phone:"12345678912", }, { date: '2016-05-03', name: '王小虎', address: '上海市普陀區金沙江路 1516 弄', age:21, phone:"12345678913", }] } }, methods: { formatter(row, column) { return row.address; } } } </script> <style scoped> .root { margin: 20px 25px 0px 25px; } </style>
效果如下:
本文參考鏈接:
https://www.jianshu.com/p/064a49f1752c