表格基础封装

本文介绍了作者基于Element UI的表格组件进行二次封装的过程,旨在简化表头添加和处理,通过v-for渲染表头数据,允许在数据中添加自定义属性以实现特定样式。文章包含封装思路和使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本来很早就该发这篇文章了,一直拖到了现在才开始动笔。此文章为系列文章,都是个人对element组件进行二次开发过的一些组件。element本身是非常优秀的组件库,其颗粒度非常小,或者说非常的基础,我们在实际开发过程中往往需要对其进行二次封装或者更多次封装来满足业务场景。

封装思路

element提供的表格组件表头需要我们一个一个的去添加,多一列就需要我们手动去添加一列的表头,如果每一列都需要同样的特殊处理,比如双击可编辑的话,工作量还是很大的。这里我们的封装思路就是使用v-for来渲染表头,这样我们就可以直接在表头数据里进行修改,也方便我们对所有表头数据进行统一处理。表头数据中添加属性自定义属性slot,用来展示需要特殊样式的。

代码实现

组件封装部分

<template>
  <div>
    <el-table :data="table" style="width: 100%">
      <el-table-column
        :prop="item.prop"
        :label="item.label"
        :width="item.width"
        v-for="(item, index) in head"
        :key="item.prop + index"
      >
        <template slot-scope="{ row, $index }">
          <slot v-if="item.slot" :name="item.slot" :data="row" :index="$index">
            {{ row[item.prop] }}
          </slot>
          <span v-else>
            {{ row[item.prop] === undefined ? "-" : row[item.prop] }}
          </span>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  props: {
    head: {
      type: Array,
      require: true,
      default: () => []
    },
    table: {
      type: Array,
      require: true,
      default: () => []
    }
  }
};
</script>

使用示例

<template>
  <base-table :head="tableHead" :table="tableData">
    <template #show="{data}">
      <el-switch
        v-model="data.show"
        active-color="#13ce66"
        inactive-color="#ff4949"
      >
      </el-switch>
    </template>
  </base-table>
</template>

<script>
import baseTable from "@/components/table/base";
export default {
  components: {
    baseTable
  },
  data() {
    return {
      // 表头数据
      tableHead: [
        {
          label: "日期",
          prop: "date"
        },
        {
          label: "姓名",
          prop: "name"
        },
        {
          label: "地址",
          prop: "address"
        },
        {
          label: "是否显示",
          prop: "show",
          slot: "show"
        }
      ],
      // 表格数据
      tableData: [
        {
          date: "2016-05-02",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1518 弄",
          show: true
        },
        {
          date: "2016-05-04",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1517 弄",
          show: false
        },
        {
          date: "2016-05-01",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1519 弄",
          show: true
        },
        {
          date: "2016-05-03",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1516 弄",
          show: true
        }
      ]
    };
  }
};
</script>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值