ElementUI对于表格的二次封装

朴灿烈づ我的快乐病毒、 2023-02-17 11:23 82阅读 0赞

前言

最近在做的项目中,有大量界面用到了表格(el-table)组件,但是里面具体显示的内容不同,是从后端获取过来的,如果每一个界面写一下el-table的代码的话,会造成代码量大且不易维护的后果,所以就对el-table表格进行了二次封装。

过程

先看一下最终效果

在这里插入图片描述

代码实现

1.抽出来的子组件的代码:

  1. <template>
  2. <div>
  3. <!-- 表格部分 -->
  4. <el-table :data="tableData" stripe border :default-sort="{prop: 'date', order: 'descending'}">
  5. <!-- 表格业务内容列 -->
  6. <template v-for="(item, index) in tableOption">
  7. <el-table-column
  8. :key="index"
  9. :prop="item.prop"
  10. :label="item.label"
  11. :align="item.align || 'center'"
  12. :show-overflow-tooltip="item.overHidden || false"
  13. :min-width="item.width || '100px'"
  14. :fixed="item.fixed || true"
  15. :sortable="item.sortable || false"
  16. :type="item.type || 'normal'"
  17. ></el-table-column>
  18. </template>
  19. <!-- 表格操作列 -->
  20. <el-table-column label="操作" v-if="isOperate" min-width="150px">
  21. <template slot-scope="scope">
  22. <slot name="operate" :row="scope.row"></slot>
  23. </template>
  24. </el-table-column>
  25. </el-table>
  26. </div>
  27. </template>
  28. <script>
  29. export default {
  30. data() {
  31. return {};
  32. },
  33. // 父组件向子组件传值
  34. props: {
  35. // 表格显示的数据
  36. tableData: {
  37. type: Array,
  38. default: function() {
  39. return [];
  40. }
  41. },
  42. // 表格的操作
  43. tableOption: {
  44. type: Array,
  45. default: function() {
  46. return [];
  47. }
  48. },
  49. // 控制操作列是否显示
  50. isOperate: {
  51. type: Boolean,
  52. default: function() {
  53. return false;
  54. }
  55. }
  56. },
  57. methods: {}
  58. };
  59. </script>
  60. <style>
  61. </style>

2.父组件中对子组件的引用

①引入子组件

  1. import commonTable from "../../components/table/common-table";

②注册子组件

  1. components: {
  2. commonTable
  3. },

③覆用子组件

  1. <common-table :tableData="tableData" :tableOption.sync="tableOption" :isOperate="isOperate">
  2. <!-- 操作列,填充operate的插槽 -->
  3. <template slot="operate" slot-scope="scope">
  4. <!-- 具体要显示的按钮可以在这里自定义 -->
  5. <el-button type="primary" size="mini">查看</el-button>
  6. </template>
  7. </common-table>
  8. // 表格数据
  9. tableData: [
  10. {
  11. id: 1,
  12. title: "林业信息拉萨解放了书法家",
  13. status: "APPROVAL_PENDING",
  14. docAuthor: "zhangshan",
  15. submitTime: "2020-06-06 23:58:49"
  16. },
  17. {
  18. id: 2,
  19. title: "林业信息拉萨解放了书法家",
  20. status: "DRAFT",
  21. docAuthor: "zhangshan",
  22. submitTime: "2020-06-07 00:10:59"
  23. },
  24. {
  25. id: 6,
  26. title: "林业信息拉萨解放了书法家",
  27. status: "APPROVAL_PENDING",
  28. docAuthor: "zhangshan",
  29. submitTime: "2020-06-11 08:07:26"
  30. }
  31. ],
  32. // 表格操作
  33. tableOption: [
  34. {
  35. type: "selection",
  36. label: "#"
  37. },
  38. {
  39. prop: "title",
  40. label: "稿件名称",
  41. overHidden: true
  42. },
  43. {
  44. prop: "status",
  45. label: "稿件状态",
  46. sortable: true
  47. },
  48. {
  49. prop: "docAuthor",
  50. label: "作者"
  51. },
  52. {
  53. prop: "submitTime",
  54. label: "提交日期",
  55. sortable: true
  56. }
  57. ],
  58. // 控制操作列是否显示
  59. isOperate: true,

API属性

在这里插入图片描述

小结

对于elementUI表格的二次封装目前封到了这个程度,这样,如果其他界面有需要使用表格的,直接覆用子组件,然后传递表格数据就可以了,代码量会减少一大部分,而且对比起来也易于维护。

发表评论

表情:
评论列表 (有 0 条评论,82人围观)

还没有评论,来说两句吧...

相关阅读

    相关 iView表格封装

    在使用iview的过程中,很多时候需要处理大部分的表格,且操作是一样的时候,那么就可以抽出来,做成共公的一部分。方便偷懒~ 如图: 为了实现表格自带操作栏,且可以自定义覆盖,