14 KiB
14 KiB
name, description, user-invocable
| name | description | user-invocable |
|---|---|---|
| arco-vue-table | Arco Design Vue 表格 Table 组件参考。用于 Vue 3、`@arco-design/web-vue`、`<a-table>`、属性、事件、插槽、示例和实现细节。 | false |
表格 Table
简介
表格的基本用法,需要传递 columns 和 data。
基本用法
<template>
<a-table :columns="columns" :data="data" />
</template>
<script>
import { reactive } from 'vue';
export default {
setup() {
const columns = [
{
title: 'Name',
dataIndex: 'name',
},
{
title: 'Salary',
dataIndex: 'salary',
},
{
title: 'Address',
dataIndex: 'address',
},
{
title: 'Email',
dataIndex: 'email',
},
];
const data = reactive([{
key: '1',
name: 'Jane Doe',
salary: 23000,
address: '32 Park Road, London',
email: 'jane.doe@example.com'
}, {
key: '2',
name: 'Alisa Ross',
salary: 25000,
address: '35 Park Road, London',
email: 'alisa.ross@example.com'
}, {
key: '3',
name: 'Kevin Sandra',
salary: 22000,
address: '31 Park Road, London',
email: 'kevin.sandra@example.com'
}, {
key: '4',
name: 'Ed Hellen',
salary: 17000,
address: '42 Park Road, London',
email: 'ed.hellen@example.com'
}, {
key: '5',
name: 'William Smith',
salary: 27000,
address: '62 Park Road, London',
email: 'william.smith@example.com'
}]);
return {
columns,
data
}
},
}
</script>
API
<table> 属性
| 参数名 | 描述 | 类型 | 默认值 | 版本 |
|---|---|---|---|---|
| columns | 表格的列描述信息 | TableColumnData[] |
[] |
|
| data | 表格的数据 | TableData[] |
[] |
|
| bordered | 是否显示边框 | boolean | TableBorder |
true |
|
| hoverable | 是否显示选中效果 | boolean |
true |
|
| stripe | 是否开启斑马纹效果 | boolean |
false |
|
| size | 表格的大小 | 'mini' | 'small' | 'medium' | 'large' |
'large' |
|
| table-layout-fixed | 表格的 table-layout 属性设置为 fixed,设置为 fixed 后,表格的宽度不会被内容撑开超出 100%。 | boolean |
false |
|
| loading | 是否为加载中状态 | boolean|object |
false |
|
| row-selection | 表格的行选择器配置 | TableRowSelection |
- |
|
| expandable | 表格的展开行配置 | TableExpandable |
- |
|
| scroll | 表格的滚动属性配置。2.13.0 版本增加字符型值的支持。2.20.0 版本增加 minWidth,maxHeight 的支持。 |
{ x?: number | string; y?: number | string; minWidth?: number | string; maxHeight?: number | string;} |
- |
|
| pagination | 分页的属性配置 | boolean | PaginationProps |
true |
仅列出常用项,低频属性按需查阅官方 API。
<table> 事件
| 事件名 | 描述 | 参数 | 版本 |
|---|---|---|---|
| expand | 点击展开行时触发 | rowKey: string | numberrecord: TableData |
|
| expanded-change | 已展开的数据行发生改变时触发 | rowKeys: (string | number)[] |
|
| select | 点击行选择器时触发 | rowKeys: string | number[]rowKey: string | numberrecord: TableData |
|
| select-all | 点击全选选择器时触发 | checked: boolean |
|
| selection-change | 已选择的数据行发生改变时触发 | rowKeys: (string | number)[] |
|
| sorter-change | 排序规则发生改变时触发 | dataIndex: stringdirection: string |
|
| filter-change | 过滤选项发生改变时触发 | dataIndex: stringfilteredValues: string[] |
|
| page-change | 表格分页发生改变时触发 | page: number |
|
| page-size-change | 表格每页数据数量发生改变时触发 | pageSize: number |
|
| change | 表格数据发生变化时触发 | data: TableData[]extra: TableChangeExtracurrentData: TableData[] |
2.40.0 增加 currentData |
| cell-mouse-enter | 单元格 hover 进入时触发 | record: TableDatacolumn: TableColumnDataev: Event |
|
| cell-mouse-leave | 单元格 hover 退出时触发 | record: TableDatacolumn: TableColumnDataev: Event |
仅列出常用项,低频属性按需查阅官方 API。
<table> 方法
| 方法名 | 描述 | 参数 | 返回值 | 版本 |
|---|---|---|---|---|
| selectAll | 设置全选状态 | checked: boolean |
- | 2.22.0 |
| select | 设置行选择器状态 | rowKey: string | number | (string | number)[]checked: boolean |
- | 2.31.0 |
| expandAll | 设置全部展开状态 | checked: boolean |
- | 2.31.0 |
| expand | 设置展开状态 | rowKey: string | number | (string | number)[]checked: boolean |
- | 2.31.0 |
| resetFilters | 重置列的筛选器 | dataIndex: string | string[] |
- | 2.31.0 |
| clearFilters | 清空列的筛选器 | dataIndex: string | string[] |
- | 2.31.0 |
| resetSorters | 重置列的排序 | - | - | 2.31.0 |
| clearSorters | 清空列的排序 | - | - | 2.31.0 |
<table> 插槽
| 插槽名 | 描述 | 参数 | 版本 |
|---|---|---|---|
| th | 自定义 th 元素 | column: TableColumnData |
2.26.0 |
| thead | 自定义 thead 元素 | - | 2.26.0 |
| empty | 空白展示 | - | |
| summary-cell | 总结行 | column: TableColumnDatarecord: TableDatarowIndex: number |
2.23.0 |
| pagination-right | 分页器右侧内容 | - | 2.18.0 |
| pagination-left | 分页器左侧内容 | - | 2.18.0 |
| td | 自定义 td 元素 | column: TableColumnDatarecord: TableDatarowIndex: number |
2.16.0 |
| tr | 自定义 tr 元素 | record: TableDatarowIndex: number |
2.16.0 |
| tbody | 自定义 tbody 元素 | - | 2.16.0 |
| drag-handle-icon | 拖拽锚点图标 | - | 2.16.0 |
| footer | 表格底部 | - | |
| expand-row | 展开行内容 | record: TableData |
仅列出常用项,低频属性按需查阅官方 API。
<table-column> 属性
| 参数名 | 描述 | 类型 | 默认值 | 版本 |
|---|---|---|---|---|
| data-index | 列信息的标识,对应TableData中的数据 | string |
- |
|
| title | 列标题 | string |
- |
|
| width | 列宽度 | number |
- |
|
| min-width | 最小列宽 | number |
- |
|
| align | 对齐方向 | TableColumnData['align'] |
- |
|
| fixed | 固定位置 | TableColumnData['fixed'] |
- |
|
| ellipsis | 是否显示为省略 | boolean |
false |
|
| sortable | 排序相关选项 | TableSortable |
- |
|
| filterable | 过滤相关选项 | TableFilterable |
- |
|
| cell-class | 自定义单元格类名 | ClassName |
- |
2.36.0 |
| header-cell-class | 自定义表头单元格类名 | ClassName |
- |
2.36.0 |
| body-cell-class | 自定义内容单元格类名 | ClassName | ((record: TableData) => ClassName) |
- |
2.36.0 |
仅列出常用项,低频属性按需查阅官方 API。
<table-column> 插槽
| 插槽名 | 描述 | 参数 | 版本 |
|---|---|---|---|
| filter-icon | 筛选按钮图标 | - | 2.23.0 |
| filter-content | 自定义筛选弹出框内容 | filterValue: string[]setFilterValue: (filterValue: string[]) => voidhandleFilterConfirm: (event: Event) => voidhandleFilterReset: (event: Event) => void |
2.23.0 |
| title | 标题 | - | |
| cell | 单元格 | record: TableDatacolumn: TableColumnDatarowIndex: number |
类型定义
type Filters = Record<string, string[]>;
type Sorter = { filed: string; direction: 'ascend' | 'descend' } | Record<string, never>;
TableData
| 参数名 | 描述 | 类型 | 默认值 | 版本 |
|---|---|---|---|---|
| key | 数据行的key | string |
- |
|
| expand | 扩展行内容 | string | RenderFunction |
- |
|
| children | 子数据 | TableData[] |
- |
|
| disabled | 是否禁用行选择器 | boolean |
false |
|
| isLeaf | 是否是叶子节点 | boolean |
false |
2.13.0 |
TableSortable
| 参数名 | 描述 | 类型 | 默认值 |
|---|---|---|---|
| sortDirections | 支持的排序方向 | ('ascend' | 'descend')[] |
- |
| sorter | 排序函数。设置为 true 可关闭内部排序。2.19.0 版本修改传出数据。 |
(( a: TableData, b: TableData, extra: { dataIndex: string; direction: 'ascend' | 'descend' } ) => number) | boolean |
- |
| sortOrder | 排序方向 | 'ascend' | 'descend' | '' |
- |
| defaultSortOrder | 默认排序方向(非受控模式) | 'ascend' | 'descend' | '' |
- |
TableFilterData
| 参数名 | 描述 | 类型 | 默认值 |
|---|---|---|---|
| text | 筛选数据选项的内容 | string | RenderFunction |
- |
| value | 筛选数据选项的值 | string |
- |
TableFilterable
| 参数名 | 描述 | 类型 | 默认值 | 版本 |
|---|---|---|---|---|
| filters | 筛选数据 | TableFilterData[] |
- |
|
| filter | 筛选函数 | (filteredValue: string[], record: TableData) => boolean |
- |
|
| multiple | 是否支持多选 | boolean |
false |
|
| filteredValue | 筛选项 | string[] |
- |
|
| defaultFilteredValue | 默认筛选项 | string[] |
- |
|
| renderContent | 筛选框的内容 | (data: { filterValue: string[]; setFilterValue: (filterValue: string[]) => void; handleFilterConfirm: (event: Event) => void; handleFilterReset: (event: Event) => void; }) => VNodeChild |
- |
|
| icon | 筛选按钮的图标 | RenderFunction |
- |
|
| triggerProps | 筛选框的弹出框配置 | TriggerProps |
- |
|
| alignLeft | 筛选图标是否左对齐 | boolean |
false |
2.13.0 |
TableColumnData
| 参数名 | 描述 | 类型 | 默认值 | 版本 |
|---|---|---|---|---|
| dataIndex | 列信息的标识,对应 TableData 中的数据 |
string |
- |
|
| title | 列标题 | string | RenderFunction |
- |
|
| width | 列宽度 | number |
- |
|
| minWidth | 最小列宽 | number |
- |
|
| align | 对齐方向 | 'left' | 'center' | 'right' |
- |
|
| fixed | 固定位置 | 'left' | 'right' |
- |
|
| ellipsis | 是否显示省略号 | boolean |
false |
|
| tooltip | 是否在显示省略号时显示文本提示。可填入 tooltip 组件属性 | boolean | Record<string, any> |
- |
2.26.0 |
| sortable | 排序相关选项 | TableSortable |
- |
|
| filterable | 过滤相关选项 | TableFilterable |
- |
|
| children | 表头子数据,用于表头分组 | TableColumnData[] |
- |
|
| cellClass | 自定义单元格类名 | ClassName |
- |
2.36.0 |
仅列出常用项,低频属性按需查阅官方 API。
TableBorder
| 参数名 | 描述 | 类型 | 默认值 |
|---|---|---|---|
| wrapper | 是否展示外边框 | boolean |
false |
| cell | 是否展示单元格边框(表头+主体) | boolean |
false |
| headerCell | 是否展示表头单元格边框 | boolean |
false |
| bodyCell | 是否展示主体单元格边框 | boolean |
false |
TableRowSelection
| 参数名 | 描述 | 类型 | 默认值 | 版本 |
|---|---|---|---|---|
| type | 行选择器的类型 | 'checkbox' | 'radio' |
- |
|
| selectedRowKeys | 已选择的行(受控模式) | BaseType[] |
- |
|
| defaultSelectedRowKeys | 默认已选择的行(非受控模式) | BaseType[] |
- |
|
| showCheckedAll | 是否显示全选选择器 | boolean |
false |
|
| title | 列标题 | string |
- |
|
| width | 列宽度 | number |
- |
|
| fixed | 是否固定 | boolean |
false |
|
| checkStrictly | 是否开启严格选择模式 | boolean |
true |
2.29.0 |
| onlyCurrent | 是否仅展示当前页的 keys(切换分页时清空 keys) | boolean |
false |
2.32.0 |
TableExpandable
| 参数名 | 描述 | 类型 | 默认值 |
|---|---|---|---|
| expandedRowKeys | 显示的展开行(受控模式) | BaseType[] |
- |
| defaultExpandedRowKeys | 默认显示的展开行(非受控模式) | BaseType[] |
- |
| defaultExpandAllRows | 是否默认展开所有的行 | boolean |
false |
| expandedRowRender | 自定义展开行内容 | (record: TableData) => VNodeChild |
- |
| icon | 展开图标 | (expanded: boolean, record: TableData) => VNodeChild |
- |
| title | 列标题 | string |
- |
| width | 列宽度 | number |
- |
| fixed | 是否固定 | boolean |
false |
TableDraggable
| 参数名 | 描述 | 类型 | 默认值 |
|---|---|---|---|
| type | 拖拽类型 | 'row' | 'handle' |
- |
| title | 列标题 | string |
- |
| width | 列宽度 | number |
- |
| fixed | 是否固定 | boolean |
false |
TableChangeExtra
| 参数名 | 描述 | 类型 | 默认值 |
|---|---|---|---|
| type | 触发类型 | 'pagination' | 'sorter' | 'filter' | 'drag' |
- |
| page | 页码 | number |
- |
| pageSize | 每页数据数 | number |
- |
| sorter | 排序信息 | Sorter |
- |
| filters | 筛选信息 | Filters |
- |
| dragTarget | 拖拽信息 | TableData |
- |
VirtualListProps
| 参数名 | 描述 | 类型 | 默认值 | 版本 |
|---|---|---|---|---|
| height | 可视区域高度 | number | string |
- |
|
| threshold | 开启虚拟滚动的元素数量阈值,当数据数量小于阈值时不会开启虚拟滚动。 | number |
- |
|
| isStaticItemHeight | (已废除)元素高度是否是固定的。2.34.1 版本废除,请使用 fixedSize |
boolean |
false |
|
| fixedSize | 元素高度是否是固定的。 | boolean |
false |
2.34.1 |
| estimatedSize | 元素高度不固定时的预估高度。 | number |
- |
2.34.1 |
| buffer | 视口边界外提前挂载的元素数量。 | number |
10 |
2.34.1 |
常用模式
- 行选择器:通过设置
row-selection开启行选择器。 - 行选择器(单选框):通过设置
rowSelection.type='radio'开启单选模式。 - 展开行:通过设置
expandable开启展开行功能。可以在data中添加expand属性,设置展开行显示内容。 - 文本省略和提示:开启
ellipsis属性可以显示省略号,如果同时开启tooltip会在显示省略号时使用文本提示。注意:开启tooltip后会修改table-cell中的 DOM 结构。 - 树形数据展示:树形数据展示的例子,
data里有children字段时会展示为树形表格。 - 子树懒加载:通过
load-more属性可以开启子树懒加载功能。开启子树懒加载功能后,需要在无子树节点标注isLeaf: true,没有标注且没有children属性的节点会认为需要子树懒加载处理。load-more属性有提供done函数进行回调,可以在回调中传入懒加载的子树。 - 表格属性:这里罗列了一些表格的属性,你可以方便的打开或关闭一些属性,查看它的效果。
- 排序和筛选:通过设置
columns中的sortable和filterable属性,可以配置排序和筛选功能。通过filter-icon-align-left属性可以让筛选按钮左对齐。
最佳实践
- 新代码优先使用 Vue 3、Composition API 和
<script setup lang="ts">。 - 模板属性使用 kebab-case,事件使用
@event-name,插槽使用#slot-name。 - 不要套用 React 专属 API,例如 JSX children、
Component.Sub或Form.useForm。 - 数据展示组件只负责呈现,分页、筛选、排序等远程状态放在业务层维护。
- 大数据量场景优先使用组件自带的分页、虚拟滚动或懒加载能力。