stk-table-vue
Stk Table Vue(Sticky Table) is a high-performance virtual scrolling table component based on Vue 3 / Vue 2.7.
Smooth performance with tens of thousands of rows. Designed for real-time data display with built-in highlighting and animation effects.
- Vue 3 & Vue 2.7 support
- Virtual scrolling (X & Y axis)
- CSS
stickybased fixed columns & fixed header - Multi-level header with horizontal virtual scroll
- Tree table & expandable rows
- Area selection with keyboard navigation
- Cell highlighting with Animation API
- Built-in custom cells: Filter, Editable, Checkbox, Number, Change
- Column resize, header drag, row drag
- Merge cells (virtual mode, huge rowspan / colspan supported)
- Custom scrollbar
- Sortable & filterable
- Theme support (dark / light)
- CSS variables for easy customization
- Based on native
<table>element - Zero third-party runtime dependencies
Documentation
Stk Table Vue Official
Stk Table React Official
Stk Table Svelte Official
Stk Table Solid Official
🤖 For AI assistants
如果你是通过 AI 编码助手(Claude Code / Cursor / Copilot / Qoder 等)接入本库:
- 先读
llms.txt(已随 npm 包发布,位于node_modules/stk-table-vue/llms.txt)—— props / 列配置 / emits / slots / 实例方法速查,外加「约束与坑」与自检清单,其版本号与本包严格一致。 - 不要靠阅读
src/StkTable/StkTable.vue或lib/*.js反推 API。 - 需要更细的说明时,抓取文档站对应单页的
.md镜像(llms.txt末尾有主题 → URL 索引)。请勿抓取llms-full.txt(全站合并,约 590KB)。 - 类型权威定义:
lib/src/StkTable/types/index.d.ts(含中文 JSDoc,hover 即可看到)。
想让 AI 助手无需提醒就能用上这份速查表,在你项目的 AGENTS.md(或 .cursor/rules/、.claude/skills/)加一行指针即可:
本项目使用 stk-table-vue。写表格代码前先读 node_modules/stk-table-vue/llms.txt,不要从源码反推 API。
Repo:
Demo
Usage
npm install stk-table-vue
<script setup>
import { StkTable } from 'stk-table-vue'
import { ref, useTemplateRef } from 'vue'
const stkTableRef = ref<InstanceType<typeof StkTable>>();
// or Vue 3.5 useTemplateRef
const stkTableRef = useTemplateRef('stkTableRef');
// highlight row
stkTableRef.value.setHighlightDimRow([rowKey], {
method: 'css' | 'animation', // default animation
className: 'custom-class-name', // for method 'css'
keyframe: [{ backgroundColor: '#aaa' }, { backgroundColor: '#222' }], // same as https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Animations_API/Keyframe_Formats
duration: 2000,
});
// highlight cell
stkTableRef.value.setHighlightDimCell(rowKey, colDataIndex, {
method: 'css' | 'animation',
className: 'custom-class-name', // for method 'css'
keyframe: [{ backgroundColor: '#aaa' }, { backgroundColor: '#222' }], // for method 'animation'
duration: 2000,
});
const columns = [
{title: 'name', dataIndex: 'name'},
{title: 'age', dataIndex: 'age'},
{title: 'address', dataIndex: 'address'},
];
const dataSource = [
{id: 1, name: 'John', age: 32, address: 'New York'},
{id: 2, name: 'Jim', age: 42, address: 'London'},
{id: 3, name: 'Joe', age: 52, address: 'Tokyo'},
{id: 4, name: 'Jack', age: 62, address: 'Sydney'},
{id: 5, name: 'Jill', age: 72, address: 'Paris'},
]
</script>
<template>
<StkTable ref='stkTableRef' row-key="id" :data-source="dataSource" :columns="columns"></StkTable>
</template>
Vue2.7 Usage
API
Example
<template>
<StkTable
ref="stkTable"
row-key="name"
v-model:columns="columns"
:style="{height:props.height}"
theme='dark'
height='200px'
bordered="h"
:row-height="28"
:show-overflow="false"
:show-header-overflow="false"
:sort-remote="false"
col-resizable
header-drag
virtual
virtual-x
no-data-full
col-resizable
auto-resize
fixed-col-shadow
:col-min-width="10"
:headless="false"
:data-source="dataSource"
@current-change="onCurrentChange"
@row-menu="onRowMenu"
@header-row-menu="onHeaderRowMenu"
@row-click="onRowClick"
@row-dblclick="onRowDblclick"
@sort-change="handleSortChange"
@cell-click="onCellClick"
@header-cell-click="onHeaderCellClick"
@scroll="onTableScroll"
@scroll-x="onTableScrollX"
@col-order-change="onColOrderChange"
/>
</template>
<script setup>
import { h, defineComponent } from 'vue';
const columns = [
{
title: 'Name',
dataIndex: 'name',
fixed: 'left',
width: '200px',
headerClassName: 'my-th',
className: 'my-td',
sorter: true,
customHeaderCell: function FunctionalComponent(props){
return h(
'span',
{ style: 'overflow:hidden;text-overflow:ellipsis;white-space:nowrap' },
props.col.title + '(render) text-overflow,',
);
},
customCell: defineComponent({
setup(){
//...
return () => <div></div> // vue jsx
}
})
},
]
</script>
Compare
Compare performance with other vue table vue-virtual-table-benchmark
Changelog
License
Related Packages
vue-list-virtualized
Vue components for efficiently rendering large, scrollable lists and tabular dat...
1,522
1
Version History
| Version | Released | License |
|---|---|---|
| 1.2.7 | MIT | |
| 1.2.6 | MIT | |
| 1.2.5 | MIT | |
| 1.2.4 | MIT | |
| 1.2.3 | MIT | |
| 1.2.2 | MIT | |
| 1.2.1 | MIT | |
| 1.2.0 | MIT | |
| 1.1.0 | MIT | |
| 1.0.4 | MIT | |
| 1.0.3 | MIT | |
| 1.0.2 | MIT | |
| 1.0.1 | MIT | |
| 1.0.0 | MIT | |
| 0.11.15 | MIT | |
| 0.11.14 | MIT | |
| 0.11.13 | MIT | |
| 0.11.12 | MIT | |
| 0.11.11 | MIT | |
| 0.11.10 | MIT | |
| 0.11.9 | MIT | |
| 0.11.8 | MIT | |
| 0.11.7 | MIT | |
| 0.11.6 | MIT | |
| 0.11.5 | MIT | |
| 0.11.4 | MIT | |
| 0.11.3 | MIT | |
| 0.11.2 | MIT | |
| 0.11.1 | MIT | |
| 0.11.0 | MIT |
Showing the latest 30 of 106. See every release on npm
Pre-releases (24)
| Version | Released | License |
|---|---|---|
| 10.0.0-beta.1 | MIT | |
| 1.2.0-beta.2 | MIT | |
| 1.2.0-beta.1 | MIT | |
| 1.0.0-beta.5 | MIT | |
| 1.0.0-beta.4 | MIT | |
| 1.0.0-beta.3 | MIT | |
| 1.0.0-beta.2 | MIT | |
| 1.0.0-beta.1 | MIT | |
| 0.11.0-beta.4 | MIT | |
| 0.11.0-beta.3 | MIT | |
| 0.11.0-beta.2 | MIT | |
| 0.11.0-beta.1 | MIT | |
| 0.10.0-beta.3 | MIT | |
| 0.10.0-beta.2 | MIT | |
| 0.9.0-beta.1 | MIT | |
| 0.0.1-beta.9 | MIT | |
| 0.0.1-beta.8 | MIT | |
| 0.0.1-beta.7 | MIT | |
| 0.0.1-beta.6 | MIT | |
| 0.0.1-beta.5 | MIT | |
| 0.0.1-beta.4 | MIT | |
| 0.0.1-beta.3 | MIT | |
| 0.0.1-beta.2 | MIT | |
| 0.0.1-beta.1 | MIT |