# Table-pro 全新的虚拟表格 🎉 V2.4.52
TIP
针对 Table-v2 虚拟表格存在的一些限制问题,进行了技术升级,以提升其兼容性,适配更多应用场景。使用前请详细阅读文档。
# 🧀 使用
# 1、确保 <w-table>
表格位于 <w-table-pro>
组件内部;将原始数据传递给 <w-table-pro>
的 data 属性,并设置 itemHeight 属性(取值为表格行的预估高度);将 <w-table-pro>
的 change 事件回调参数传递给 <w-table>
的 data 属性。
<w-table-pro :data="regionData" :item-height="28" @change="(val) => tableData = val">
<w-table :data="tableData" row-key="id">
// 建议在 `<w-table>` 组件中显式指定 row-key 属性,以避免潜在的问题
</w-table>
</w-table-pro>
2
3
4
5
# 2、使用 <w-table-pro>
实现表格虚拟滚动时,不支持 WinDesign 表格原有的索引、多选、扩展行等功能。若需兼容这些功能,请使用 <w-table-pro-column>
组件
<w-table-pro :data="regionData" :item-height="28" @change="(val) => tableData = val">
<w-table :data="tableData">
<w-table-pro-column type="selection" :selectable="getSelectable" width="60">
</w-table-pro-column>
</w-table>
</w-table-pro>
2
3
4
5
6
# 3、滚动卡顿、白屏问题
为减缓滚轮滚动速度,可使用 slowNum 参数(默认值为 1),数值越大,滚动越慢。在 macOS 系统上,使用 Chrome 或 Firefox 浏览器,在 自定义固定列 的表格中快速滚动时,可能会出现白屏现象。通过调整该参数,可有效缓解此问题。
this.$refs.virtualScroll.slowOnMousewheel(2)
# 3、表格高度设置
- 表格无固定高度(自动查找最近的父级滚动容器)
- 固定高度(如 400px,表格内部滚动)
- 高度 100% 撑满容器高度
- 可通过 scroll-box=".scroller-box" 指定自定义滚动容器
# 3、行高度设置
表格行高度不确定时:可以传入一个预估的 itemHeight。但需注意,如果 itemHeight 与实际行高不一致,可能会导致滚动时出现数据错乱、抖动或底部留白等问题。
表格行高度确定时:请先将 dynamic 设置为 false(默认为 true),再传入准确的 itemHeight,可显著降低虚拟滚动的计算开销,减少滚动过程中的白屏现象。
# 4、固定列问题
由于使用固定列会增加表格的 DOM 结构生成,可能影响性能,因此推荐使用 position: sticky 实现固定列效果。该方式不会生成额外的 <table>
,能带来更顺滑的滚动体验。
使用 sticky 固定列时,请注意以下几点:
需设置表格的 headerCellStyle 和 cellStyle 样式,以确保固定效果正确;
固定列的组件应按照顺序排布在最左侧或最右侧,避免中间插入非固定列,确保布局逻辑一致。
# 代码演示
TIP
问题一:右侧固定列在初始化时没有正确显示阴影效果
this.$refs.virtualScroll.observeTable()
问题二:右侧滚动条头部没有正确显示背景色
在操作列上设置 last-column
<w-table-pro-column profixed="right" last-column label="操作" width="100" />
# API
# Table-pro Attributes (继承 w-table 及 w-table-column 的属性)
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
data | 总数据 | Array | 必填 | |
key-prop | key 值,data 数据中的唯一 id【⚠️ 若 keyProp 未设置或 keyProp 值不唯一,可能导致表格空数据或者滚动时渲染的数据断层、不连贯、滚动不了】 | string | — | id |
item-height | 每一行的预估高度 | number | — | 40 |
scroll-box | 指定滚动容器;在指定滚动容器时,如果表格设置了 height 高度,则滚动容器为表格内的滚动容器;如果表格未设置 height 高度,则自动获取外层的滚动容器,直至 window 容器为止 | string | 'window'、css 选择器 | - |
buffer | 顶部和底部缓冲区域,值越大显示表格的行数越多 | Number | — | 200 |
throttle-time | 滚动事件的节流时间 | number | — | 16 |
dynamic | 动态获取表格行高度,默认开启。设置为 false 时,则以 itemHeight 为表格行的真实高度,能大大减少虚拟滚动计算量,减少滚动白屏;如果 itemHeight 与表格行的真实高度不一致,可能导致滚动时表格数据错乱、抖动、底部有空白 | boolean | — | true |
virtualized | 是否开启虚拟滚动 | boolean | — | true |
row-span-key | 当使用了 w-table 的合并行,必须设置 rowSpanKey 函数并返回每组合并行中共用的 key 值 | Function(row, index) | — | - |
selection-sort | 支持多选可自定义选中数据的排序规则,默认为 true 按选择顺序排,传入 false 为按列表中的顺序排,传入函数为自定义排序规则 | Boolean、Function | — | - |
getWTable | 获取 <w-table> 组件,默认获取 <w-table-pro> 的第一个子组件;如果 <w-table> 组件经过用户封装,那么需要使用该方法返回正确的 <w-table> 组件【可通过 ref、$children 返回正确的值】 | Function | — | - |
keep-scroll | 当使用 v-show,keep-alive 切换表格显示时,会保持原来滚动位置 | boolean | — | true |
# Methods
方法名 | 说明 | 参数 |
---|---|---|
scrollTo | 滚动到第几行;index - 行数索引值;offset - 偏移位置 | (index: number, offset: number) |
scrollToRow | 滚动到对应的行;row;offset - 偏移位置 | (row: object, offset: number) |
update | 更新,会重新计算实际渲染数据和位置 | - |
slowOnMousewheel | 为减缓滚轮滚动速度,可使用 slowNum 参数(默认值为 1),数值越大,滚动越慢。在 macOS 系统上,使用 Chrome 或 Firefox 浏览器,在 自定义固定列 的表格中快速滚动时,可能会出现白屏现象。通过调整该参数,可有效缓解此问题。 | slowNum |
getParentNode | 【扩展树形表格】获取父节点 | row |
getParentNodes | 【扩展树形表格】获取所有父节点 | row |
getChildNodes | 【扩展树形表格】获取子节点 | row |
reloadNode | 【扩展树形表格】重新加载节点 | row |
expandAllNodes | 【扩展树形表格】展开所有树节点 | - |
unexpandAllNodes | 【扩展树形表格】收起所有树节点,懒加载节点除外 | - |
# Events
事件名称 | 说明 | 参数 |
---|---|---|
change | 计算完成真实显示的表格行数 | (renderData, start, end):renderData 真实渲染的数据,start 和 end 指的是渲染的数据在总数据的开始到结束的区间范围 |
# Table-pro-column Attributes (继承 w-table-column 的属性)
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
* | 支持 <w-table-column> 组件的 props 属性,如 label, fixed, prop, width, min-width, index 等等 | - | — | - |
type | type="index" 为索引;type="selection" 为多选;type="expand" 为扩展行;type="tree" 为树形表格 | String | 选填 | |
profixed | 固定列。由于使用固定列会增加表格的 DOM 结构生成,可能影响性能,因此推荐使用 position: sticky 实现固定列效果。该方式不会生成额外的 <table> ,能带来更顺滑的滚动体验 | String/Boolean | left/right/true | - |