有时候大家必定在想,我能不能间接一个columns,间接进去一个表格,我以前分享过相似表单的封装,明天给大家带来表格的封装,心愿能帮忙到须要的人,如果有帮忙到你,能够点个赞
<template> <div> <v-table :data="tableData" :columns="columns"> </v-table> </div></template><script>export default { data() { return { 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 弄', }, ], columns: [ { prop: 'date', label: '日期', }, { prop: 'name', label: '题目', }, { prop: 'address', label: '地址', } ], }; }};</script>
怎么实现呢?是不是能够在element-ui的根底上再封装一层呢?!!!上代码
<script type="text/jsx">export default { name: 'VTable', props: { columns: { required: true, type: Array, default: () => ([]) }, data: { type: Array, default: () => ([]) }, }, render(h) { return <div> <el-table props={{ data: this.data }}> { this.columns.map(item => { return <el-table-column props={{ ...item }} > </el-table-column> }) } </el-table> </div> }}</script>
十分的简略一般就达到的咱们想要的目标,如果你认为到这就满足了需要你就错了。
- 能不能间接传一个异步接口?
- 能不能兼容slot?
- 能不能兼容element的el-table
答案必定是能够的嘛,不然我写进去干嘛,间接上菜
//list.vue<template> <div> <v-table :table="{ size: 'medium' }" :api="getData" :columns="columns"> <template v-slot:name="scope">{{ scope.row.name }}</template> <template v-slot:action="scope"> <el-button size="mini" @click="handleEdit(scope.$index, scope.row)" >编辑</el-button > <el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)" >删除</el-button > </template> </v-table> </div></template>// VTable.vue<script type="text/jsx">export default { name: 'VTable', props: { columns: { required: true, type: Array, default: () => ([]) }, table: { type: Object, default: () => {} }, api: { required: true, type: Function, default: () => Promise.resolve({ list: [] }) } }, data() { return { data: [] } }, mounted() { this.getList() }, methods: { getList(params){ this.api({ ...params }).then(res => { let { list } = res this.data = list }) } }, render(h) { return <div> <el-table props={{ ...this.table, data: this.data }}> { this.columns.map(item => { return <el-table-column props={{ ...item }} > {this.$scopedSlots[item.prop]} </el-table-column> }) } </el-table> </div> }}</script>
后续
- 封装分页
- 封装表格筛选表单
大家能够依据本人的需要在这个根底下来做扩大