Skip to content

Table 表格

用于展示结构化数据,内置分页、固定表头、横向/纵向滚动、列宽拖拽、自定义单元格等能力。列既可以用 columns 配置式声明,也可以用 <c-table-column> 子组件声明。

默认 total > 0 时自动显示分页;也可通过 show-pagination 强制控制显隐。

基础用法

传入 columns(列定义)与 data(数据),用 v-model:currentPage / v-model:pageSize 双向绑定分页。

斑马纹与边框

stripe 开启斑马纹,border 显示边框。

高亮当前行

设置 highlight-current-row 后点击行会高亮,并可监听 row-click 事件获取当前行数据。

自定义列宽与对齐

在列定义中设置 widthalignleft | center | right)控制列宽与对齐;align 默认 left

不同尺寸

size 控制视觉密度,支持 small | medium | large

固定表头与高度

height 设置可视高度(默认 300),内容超出时仅内容区滚动;sticky-header(默认开启)让表头保持固定。

横向滚动

scroll-x(默认开启)在列总宽超过容器时出现横向滚动条。鼠标移入表格底部即可拖动横向滚动条。

列宽拖拽

设置 column-resizable 开启列宽拖拽,min-column-width / max-column-width 限制范围(单位 px,仅支持像素宽度)。

自定义单元格插槽

每列以其 key 作为插槽名,可自定义单元格内容(如操作按钮、标签等)。插槽参数为 { row, index }

使用子组件定义列

columns 配置外,也可用 <c-table-column> 子组件以声明式方式定义列(prop 对应字段、label 为表头)。同样支持与 prop 同名的插槽。

分页配置

通过 page-sizesshow-size-changershow-totaltotal-text 自定义分页器;total-text 支持 {total} 占位符。

空数据

无数据时显示 empty-text 占位文案。

服务端分页

监听 pageChange,请求服务端数据后更新 datatotal。下例用 setTimeout 模拟请求。

行与单元格类名

通过 row-class-namecell-class-nameheader-cell-class-name 为行 / 单元格 / 表头单元格动态添加类名(可为字符串或函数)。

API

Table Props

属性名说明类型默认值
columns列定义(配置式)TableColumn[][]
data表格数据any[][]
total数据总条数,用于分页计算number0
current-page当前页(支持 v-model:currentPagenumber1
page-size每页条数(支持 v-model:pageSizenumber10
show-pagination是否显示分页(不设置时 total>0 自动显示)booleanundefined
page-sizes可选每页条数number[][10,20,50,100]
show-size-changer是否显示每页条数切换器booleantrue
show-total是否显示总条数booleantrue
total-text总条数文案模板,支持 {total} 占位符string'总条数'
empty-text空数据占位文案string'暂无数据'
row-key行唯一键字段名string'id'
size表格尺寸'small' | 'medium' | 'large''medium'
stripe是否显示斑马纹booleanfalse
border是否显示边框booleanfalse
highlight-current-row是否高亮点击的当前行booleanfalse
row-class-name行类名string | ((row, index) => string)undefined
header-cell-class-name表头单元格类名string | ((column, index) => string)undefined
cell-class-name单元格类名string | ((row, column, rowIndex, colIndex) => string)undefined
column-resizable是否开启列宽拖拽booleanfalse
min-column-width最小列宽(px)number60
max-column-width最大列宽(px)number600
scroll-x是否启用横向滚动booleantrue
height可视高度,超出则内容区滚动number | string300
max-height最大高度number | stringundefined
sticky-header是否固定表头booleantrue

Table Events

事件名说明回调参数
update:currentPage当前页变更(page: number)
update:pageSize每页条数变更(size: number)
pageChange分页变化(page: number, size: number)
row-click点击某一行时触发(row: any, index: number)

Table Slots

插槽名说明参数
[column.key]以列的 key 为名的自定义单元格内容{ row, index }

TableColumn(columns 项)

字段说明类型
key字段名,同时作为插槽名string
title表头标题string
width列宽number | string
align单元格对齐'left' | 'center' | 'right'
render自定义渲染函数(row, index) => any

TableColumn 子组件 Props

配合 <c-table-column> 声明式使用:

属性名说明类型默认值
prop对应字段名(同时作为插槽名)string''
label表头标题string''
width列宽number | stringundefined
align单元格对齐'left' | 'center' | 'right''left'
header-align表头对齐'left' | 'center' | 'right'undefined

最佳实践

  • 设置 row-key,为每行提供稳定唯一键,提升渲染稳定性。
  • 列宽拖拽仅支持像素宽度(如 80"120px"),百分比/自适应宽度无法拖拽。
  • 服务端分页:通过 pageChange 触发请求,响应后更新 datatotal
  • 大数据量:用分页控制单页行数;若需展示 500+ 行,建议自行集成虚拟列表。