Skip to content

Table 表格

基于 Element Plus Table 增强的表格组件,具有搜索、分页、导出和数字格式化等附加功能。

基础表格

带原始数据和列配置的基础表格。

使用 raw-data 提供表格数据,使用 columns 定义表格结构。每个列对象支持所有 Element Plus 表格列属性。

合并列

自动合并指定列中具有相同值的单元格。

使用 merge-columns 属性指定当值相同时应合并单元格的列。

搜索功能

内置搜索功能,支持列选择。

使用 show-search 属性启用搜索。用户可以搜索所有列或选择特定列进行搜索。

Column

刷新和导出

在表格工具栏添加刷新和导出按钮。

使用 show-refreshshow-export 属性显示操作按钮。监听 refreshexport 事件处理用户操作。

分页

内置分页支持大数据集。

pagination 设置为 true 启用基础分页,或传递配置对象自定义分页行为。

Total 50
  • 1
  • 2
  • 3
  • 4
  • 5
Go to

数字格式化

自动格式化表格单元格中的数值。

启用 number-format 自动格式化带千位分隔符和小数位的数字。(使用 formatNumber)

Table API

Table 属性

名称说明类型默认值
raw-data表格数据源array[]
columns列配置array[]
merge-columns要合并单元格的列array[]
show-search显示搜索功能booleanfalse
search-value默认搜索值string''
search-columns默认选择的搜索列array[]
show-refresh显示刷新按钮booleanfalse
show-export显示导出按钮booleanfalse
pagination启用分页boolean | objectfalse
number-format启用数字格式化boolean | objectfalse
Element Plus Table 属性
名称说明类型默认值
data显示的数据array[]
heightTable 的高度, 默认为自动高度。 如果 height 为 number 类型,单位 px;如果 height 为 string 类型,则这个高度会设置为 Table 的 style.height 的值,Table 的高度会受控于外部样式。string / number
max-heightTable 的最大高度。 合法的值为数字或者单位为 px 的高度。string / number
stripe是否为斑马纹 tablebooleanfalse
border是否带有纵向边框booleanfalse
sizeTable 的尺寸enum
fit列的宽度是否自撑开booleantrue
show-header是否显示表头booleantrue
highlight-current-row是否要高亮当前行booleanfalse
current-row-key当前行的 key,只写属性string / number
row-class-name行的 className 的回调方法,也可以使用字符串为所有行设置一个固定的 className。Function / string
row-style行的 style 的回调方法,也可以使用一个固定的 Object 为所有行设置一样的 Style。Function / object
cell-class-name单元格的 className 的回调方法,也可以使用字符串为所有单元格设置一个固定的 className。Function / string
cell-style单元格的 style 的回调方法,也可以使用一个固定的 Object 为所有单元格设置一样的 Style。Function / object
header-row-class-name表头行的 className 的回调方法,也可以使用字符串为所有表头行设置一个固定的 className。Function / string
header-row-style表头行的 style 的回调方法,也可以使用一个固定的 Object 为所有表头行设置一样的 Style。Function / object
header-cell-class-name表头单元格的 className 的回调方法,也可以使用字符串为所有表头单元格设置一个固定的 className。Function / string
header-cell-style表头单元格的 style 的回调方法,也可以使用一个固定的 Object 为所有表头单元格设置一样的 Style。Function / object
row-key行数据的 Key,用来优化 Table 的渲染; 在使用 reserve-selection 功能与显示树形数据时,该属性是必填的。 类型为 String 时,支持多层访问:user.info.id,但不支持 user.info[0].id,此种情况请使用 Function。function / string
empty-text空数据时显示的文本内容, 也可以通过 #empty 设置string暂无数据
default-expand-all是否默认展开所有行,当 Table 包含展开行存在或者为树形表格时有效booleanfalse
expand-row-keys可以通过该属性设置 Table 目前的展开行,需要设置 row-key 属性才能使用,该属性为展开行的 keys 数组。object
default-sort默认的排序列的 prop 和顺序。 它的 prop 属性指定默认的排序的列,order 指定默认排序的顺序object如果只指定了 prop, 没有指定 order, 则默认顺序是 ascending
tooltip-effect溢出 tooltip 的 effectenumdark
tooltip-options溢出 tooltip 的选项,参见下述 tooltip 组件objectobject
append-filter-panel-to筛选弹出框挂载的 HTML 元素string
show-summary是否在表尾显示合计行booleanfalse
sum-text合计行第一列的文本string合计
summary-method自定义的合计计算方法Function
span-method合并行或列的计算方法Function
select-on-indeterminate在多选表格中,当仅有部分行被选中时,点击表头的多选框时的行为。若为 true,则选中所有行;若为 false,则取消选择所有行booleantrue
indent展示树形数据时,树节点的缩进number16
lazy是否懒加载子节点数据booleanfalse
load加载子节点数据的函数,lazy 为 true 时生效Function
tree-props渲染嵌套数据的配置选项objectobject
table-layout设置表格单元、行和列的布局方式enumfixed
scrollbar-always-on总是显示滚动条booleanfalse
show-overflow-tooltip当内容过长被隐藏时显示 tooltip。它会影响所有表格列,参考表格 tooltip-optionsboolean / object
flexible确保主轴的最小尺寸不遵循内容booleanfalse
scrollbar-tabindexbody 滚动条的 wrap 容器的 tabindexstring / number
allow-drag-last-column是否允许拖动最后一列booleantrue
tooltip-formatter使用 show-overflow-tooltip 时自定义 tooltip 内容Function
preserve-expanded-content折叠时是否在 DOM 中保留展开行的内容booleanfalse
native-scrollbar是否使用原生滚动条booleanfalse

Table 事件

名称说明类型
refresh点击刷新按钮时触发Function
export点击导出按钮时触发Function
search执行搜索时触发Function
pagination-change分页变化时触发Function
Element Plus Table 事件
名称说明类型
select当用户手动勾选数据行的 Checkbox 时触发的事件Function
select-all当用户手动勾选全选 Checkbox 时触发的事件Function
selection-change当选择项发生变化时会触发该事件Function
cell-mouse-enter当单元格 hover 进入时会触发该事件Function
cell-mouse-leave当单元格 hover 退出时会触发该事件Function
cell-click当某个单元格被点击时会触发该事件Function
cell-dblclick当某个单元格被双击击时会触发该事件Function
cell-contextmenu当某个单元格被鼠标右键点击时会触发该事件Function
row-click当某一行被点击时会触发该事件Function
row-contextmenu当某一行被鼠标右键点击时会触发该事件Function
row-dblclick当某一行被双击时会触发该事件Function
header-click当某一列的表头被点击时会触发该事件Function
header-contextmenu当某一列的表头被鼠标右键点击时触发该事件Function
sort-change当表格的排序条件发生变化的时候会触发该事件Function
filter-changecolumn 的 key, 如果需要使用 filter-change 事件,则需要此属性标识是哪个 column 的筛选条件Function
current-change当表格的当前行发生变化的时候会触发该事件,如果要高亮当前行,请打开表格的 highlight-current-row 属性Function
header-dragend当拖动表头改变了列的宽度的时候会触发该事件Function
expand-change当用户对某一行展开或者关闭的时候会触发该事件(展开行时,回调的第二个参数为 expandedRows;树形表格时第二参数为 expanded)Function
scroll滚动后触发Function

Table 插槽

Element Plus Table 插槽
名称说明子标签
default自定义默认内容Table-column
append插入至表格最后一行之后的内容。如果需要对表格的内容进行无限滚动操作,可能需要用到这个 slot。若表格有合计行,该 slot 会位于合计行之上。
empty当数据为空时自定义的内容

Table 暴露

Element Plus Table 暴露
方法说明类型
clearSelection用于多选表格,清空用户的选择Function
getSelectionRows返回当前选中的行Function
toggleRowSelection用于多选表格,切换某一行的选中状态, 如果使用了第二个参数,则可直接设置这一行选中与否Function
toggleAllSelection用于多选表格,切换所有行的选中状态Function
toggleRowExpansion用于可展开表格与树形表格,切换某一行的展开状态, 如果使用了第二个参数,则可直接设置这一行展开与否Function
setCurrentRow用于单选表格,设定某一行为选中行, 如果调用时不加参数,则会取消目前高亮行的选中状态。Function
clearSort用于清空排序条件,数据会恢复成未排序的状态Function
clearFilter不传入参数时用于清空所有过滤条件,数据会恢复成未过滤的状态,也可传入由 columnKey 组成的数组以清除指定列的过滤条件Function
doLayout对 Table 进行重新布局。 当 Table 或其祖先元素由隐藏切换为显示时,可能需要调用此方法Function
sort手动对 Table 进行排序。 参数 prop 属性指定排序列,order 指定排序顺序。Function
scrollTo滚动到一组特定坐标Function
setScrollTop设置垂直滚动位置Function
setScrollLeft设置水平滚动位置Function
columns获取表格列上下文。array
updateKeyChildren用于懒加载表格,必须设置 rowKey,更新 key 子项Function

Table Column API

Table Column 属性

扩展所有 Element Plus TableColumnCtx 属性,并增加额外功能:

名称说明类型默认值
slots自定义插槽配置Function-
Element Plus Table Column 属性
名称说明类型默认值
type对应列的类型。 如果设置了 selection 则显示多选框; 如果设置了 index 则显示该行的索引(从 1 开始计算);如果设置了 expand 则显示为一个可展开的按钮enumdefault
index如果设置了 type=index,可以通过传递 index 属性来自定义索引number / Function
label显示的标题string
column-keycolumn 的 key, 如果需要使用 filter-change 事件,则需要此属性标识是哪个 column 的筛选条件string
prop对应列内容的字段名, 也可以使用 property 属性string
width对应列的宽度string / number''
min-width对应列的最小宽度, 与 width 的区别是 width 是固定的,min-width 会把剩余宽度按比例分配给设置了 min-width 的列string / number''
fixed列是否固定在左侧或者右侧。 true 表示固定在左侧enum / booleanfalse
render-header列标题 Label 区域渲染使用的 FunctionFunction
sortable对应列是否可以排序, 如果设置为 'custom',则代表用户希望远程排序,需要监听 Table 的 sort-change 事件boolean / stringfalse
sort-method对数据进行排序的时候使用的方法, 仅当 sortable 设置为 true 的时候有效,需返回一个数字,和 Array.sort 表现一致Function
sort-by指定数据按照哪个属性进行排序,仅当 sortable 设置为 true 且没有设置 sort-method 的时候有效。 如果 sort-by 为数组,则先按照第 1 个属性排序,如果第 1 个相等,则按照第 2 个排序,以此类推Function / string / object
sort-orders数据在排序时所使用排序策略的轮转顺序,仅当 sortable 为 true 时有效。 需传入一个数组,随着用户点击表头,该列按照数组中元素的顺序依次排序object['ascending', 'descending', null]
resizable对应列是否可以通过拖动改变宽度(需要在 el-table 上设置 border 属性为真)booleantrue
formatter用来格式化内容function
show-overflow-tooltip当内容过长被隐藏时显示 tooltipboolean / objectundefined
align对齐方式enumleft
header-align表头对齐方式, 若不设置该项,则使用表格的对齐方式enumleft
class-name列的 classNamestring
label-class-name当前列标题的自定义类名string
selectable仅对 type=selection 的列有效,类型为 Function,Function 的返回值用来决定这一行的 CheckBox 是否可以勾选Function
reserve-selection仅对 type=selection 的列有效, 类型为 Boolean,为 true 则会在数据更新之后保留之前选中的数据(需指定 row-key)booleanfalse
filters数据过滤的选项, 数组格式,数组中的元素需要有 text 和 value 属性。array
filter-placement过滤弹出框的定位enum
filter-class-name过滤弹出框的 classNamestring
filter-multiple数据过滤的选项是否多选booleantrue
filter-method数据过滤使用的方法, 如果是多选的筛选项,对每一条数据会执行多次,任意一次返回 true 就会显示。function
filtered-value选中的数据过滤项, 如果需要自定义表头过滤的渲染方式,可能会需要此属性。object
tooltip-formatter使用 show-overflow-tooltip 时自定义 tooltip 内容Function

Table Column 插槽

Element Plus Table Column 插槽
名称说明类型
default自定义列的内容object
header自定义表头的内容object
filter-icon自定义筛选图标object
expand自定义展开列的内容object

类型声明

显示声明
ts
interface Sort {
  prop: string
  order: "ascending" | "descending"
  init?: any
  silent?: any
}

interface TreeNode {
  expanded?: boolean
  loading?: boolean
  noLazyChildren?: boolean
  indent?: number
  level?: number
  display?: boolean
}

type DefaultRow = Record<PropertyKey, any>

type TableColumnCtx<T extends DefaultRow = DefaultRow> = {
  id: string
  realWidth: number | null
  type: string
  label: string
  className: string
  labelClassName: string
  property: string
  prop: string
  width?: string | number
  minWidth: string | number
  renderHeader: (data: CI<T>) => VNode
  sortable: boolean | string
  sortMethod: (a: T, b: T) => number
  sortBy: string | ((row: T, index: number, array?: T[]) => string) | string[]
  resizable: boolean
  columnKey: string
  rawColumnKey: string
  align: string
  headerAlign: string
  showOverflowTooltip?: boolean | TableOverflowTooltipOptions
  tooltipFormatter?: TableOverflowTooltipFormatter<T>
  fixed: boolean | string
  formatter: (row: T, column: TableColumnCtx<T>, cellValue: any, index: number) => VNode | string
  selectable: (row: T, index: number) => boolean
  reserveSelection: boolean
  filterMethod: FilterMethods<T>
  filteredValue: string[]
  filters: Filters
  filterPlacement: string
  filterMultiple: boolean
  filterClassName: string
  index: number | ((index: number) => number)
  sortOrders: (TableSortOrder | null)[]
  renderCell: (data: any) => VNode | VNode[]
  colSpan: number
  rowSpan: number
  children?: TableColumnCtx<T>[]
  level: number
  filterable: boolean | FilterMethods<T> | Filters
  order: TableSortOrder | null
  isColumnGroup: boolean
  isSubColumn: boolean
  columns: TableColumnCtx<T>[]
  getColumnIndex: () => number
  no: number
  filterOpened?: boolean
  renderFilterIcon?: (scope: any) => VNode
  renderExpand?: (scope: any) => VNode
}

interface EpTableColumnProps extends Partial<TableColumnCtx<any>> {
  slots?: {
    default?: string
    header?: string
  }
}

interface EpTableProps {
  rawData?: any[]
  columns?: EpTableColumnProps[]
  mergeColumns?: string[]
  showSearch?: boolean
  searchValue?: string
  searchColumns?: string[]
  showRefresh?: boolean
  showExport?: boolean
  pagination?: boolean | PaginationProps
  numberFormat?: boolean | FormatNumberOptions
}

interface EpTableEmits {
  refresh: []
  export: [data: any[], columns: EpTableColumnProps[]]
  search: [value: string, columns: string[]]
  "pagination-change": [page: number, size: number]
}

FAQ

如何在表格中使用图片预览?

vue
<template>
  <el-table-column width="180">
    <template #default="scope">
      <el-image preview-teleported :preview-src-list="srcList" />
    </template>
  </el-table-column>
</template>

为什么使用 DOM 模板时列没有渲染?

典型问题:#5046 #5862 #6919

这是因为 HTML 规范只允许少数特定元素省略关闭标签,最常见的是 <input><img>。对于所有其他元素,如果省略关闭标签,原生 HTML 解析器会认为您没有终止开始标签。

更多详情请参考 Vue 文档