当前位置: 首页 > article >正文

基于Vue 3 简单自定义Table组件(乞丐版)

本技术文档介绍了如何使用 Vue 3 和 TypeScript 构建一个高度可定制的表格组件,并通过插槽支持自定义列内容。本文档将详细讲解表格组件的实现原理、结构、使用方法以及样式定制。

目录
  1. 组件概述
  2. 组件结构
  3. 使用案例
  4. 样式定制
  5. 完整代码示例

1. 组件概述

这个 Table 组件是一个高度可定制的表格,支持传入数据、列配置,并允许通过插槽自定义列的内容。其核心功能包括:

  • 根据传入的数据和列配置动态渲染表格
  • 支持自定义列内容渲染
  • 支持列宽度的定制
  • 可通过插槽灵活替换列的内容展示

2. 组件结构

模板结构
 
<template>
  <div class="custom-table">
    <!-- 表头 -->
    <div class="custom-table-header">
      <div
        class="custom-table-header-cell"
        v-for="column in columns"
        :key="column.prop"
        :style="{ width: column.width || 'auto' }"
      >
        {{ column.label }}
      </div>
    </div>

    <!-- 表格内容 -->
    <div class="custom-table-body">
      <div
        class="custom-table-row"
        v-for="(row, rowIndex) in data"
        :key="rowIndex"
      >
        <div
          class="custom-table-cell"
          v-for="column in columns"
          :key="column.prop"
          :style="{ width: column.width || 'auto' }"
        >
          <!-- 插槽支持 -->
          <slot :name="column.prop" :row="row" :index="rowIndex">
            {{ row[column.prop] }}
          </slot>
        </div>
      </div>
    </div>
  </div>
</template>

定义数据结构

<script setup lang="ts">
defineProps<{ data: any[]; columns: any[] }>();
</script>

样式
 

<style scoped>
.custom-table {
  display: flex;
  flex-direction: column;
  border-radius: 2px;
  overflow: hidden;
  font-size: 12px;
}

.custom-table-header {
  display: flex;
  font-weight: bold;
  background-image: url("pics/表格色块.png");
  color: #9cbdd2;
}

.custom-table-header-cell {
  padding: 10px;
  text-align: left;
  flex-shrink: 0;
}

.custom-table-body {
  display: flex;
  flex-direction: column;
}

.custom-table-row {
  display: flex;
  color: #c4c5ca;
}

.custom-table-row:nth-child(odd) {
  background-color: #051c2f;
}
.custom-table-row:nth-child(even) {
  background-color: #031224;
}

.custom-table-cell {
  padding: 10px;
  text-align: left;
  flex-shrink: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
</style>

2. 样式定制

组件的样式通过 scoped 样式进行隔离,避免与其他组件的样式冲突。样式主要控制表格的布局、字体、颜色和间距等,以下是一些可定制的样式:

  • 表头样式:可以修改 .custom-table-header.custom-table-header-cell 来调整表头的背景颜色、字体、间距等。
  • 行样式:通过 .custom-table-rownth-child 伪类为奇偶行设置不同的背景颜色。
  • 单元格样式.custom-table-cell 用于控制单元格的内边距、文本溢出和文本对齐等。
定制背景图

通过修改 .custom-table-header 中的 background-image 属性,可以为表头添加背景图。图像路径可以根据实际需求调整。

列宽定制

在列配置中,您可以为每列设置 width 属性,以控制列的宽度:
 

{ prop: "conclusion", label: "规则名称", width: "150px" },

3. 使用案例

基本用法

定义表格数据和列配置:

    <Table :data="tableData" :columns="tableColumns">
      <!-- 自定义列内容 -->
      <template #name="{ row }">
        <span style="color: blue">{{ row.name }}</span>
      </template>
    </Table>

const tableData = ref([
  {
    conclusion: "绕组短路",
    equipmentPositionName: "电机组件",
    reason: "故障原因",
    solution: "解决措施",
  },
  {
    conclusion: "绕组短路",
    equipmentPositionName: "电机组件",
    reason: "故障原因",
    solution: "解决措施",
  },
]);

const tableColumns = ref([
  { prop: "conclusion", label: "规则名称", width: "100px" },
  { prop: "equipmentPositionName", label: "所属部位", width: "100px" },
  { prop: "reason", label: "故障类型", width: "100px" },
  { prop: "solution", label: "解决措施" },
]);

总结

通过该自定义表格组件,您可以灵活地展示和定制数据。通过插槽的支持,用户可以轻松修改每一列的内容展示,适应不同需求。样式方面,您可以根据实际项目需求对表格进行全方位的定制,提升用户体验。


http://www.kler.cn/a/441082.html

相关文章:

  • 数据结构-Stack和栈
  • Ansible自动化运维实战--fetch、cron和group模块(5/8)
  • [EAI-027] RDT-1B,目前最大的用于机器人双臂操作的机器人基础模型
  • AI时序预测: iTransformer算法代码深度解析
  • 你好!这是我自己的CSDN博客!
  • concurrent.futures.Future对象详解:利用线程池与进程池实现异步操作
  • C语言刷题(2)
  • phpSpider如何应对网页结构的变化
  • OpenCV目标检测 级联分类器 C++实现
  • 力扣--LCR 158.库存管理II
  • Python与数据库Mysql连接及操作方法
  • Day41 动态规划part08
  • 【C++】模板机制
  • SSM 垃圾分类系统:科技赋能环保新篇
  • Vue Web开发(八)
  • Android 写排行榜,顶部前三
  • 字符2
  • Group FLUX - Summary Essay of the Alpha Phase Problem
  • Next.js流量教程:如何在 Next.js 中添加结构化数据以生成丰富摘要(Rich Snippets)
  • 【现代服务端架构】传统服务器 对比 Serverless
  • 电机控制杂谈(23)——共模电压与轴电流
  • es 开启slowlog
  • UIP协议栈 TCP通信客户端 服务端,UDP单播 广播通信 example
  • 本地部署大模型QPS推理测试
  • sql中case when若条件重复 执行的顺序
  • 召回系统介绍