【免费下载链接】vue-table
data table simplify! -- vuetable is a Vue.js component that will automatically request (JSON) data from the server and display them nicely in html table with swappable/extensible pagination component.
本教程详解vue-table(vuetable)——一个 Vue 1.x 轻量级数据表格组件——如何实现“行内展开详情”:点击表格某行后,其下方会展开一条**明细行(detail row)**展示更详细的数据。整个功能就实现在 Vuetable.vue 这一个文件里,仓库还附带了可直接参考的示例页 examples/semantic.html。
📌 什么是“明细行”(Detail Row)
明细行功能自 v1.2.0 引入,作用类似订单列表里的“展开面板”:每一行数据都可以在下方渲染一条横跨所有列的附加行,用来展示更多细节。
它有两个核心设计:
- 显隐状态与数据分离:明细行是否展开由组件内部的
visibleDetailRows数组管理,不触碰原始数据,翻页也不会被重置; - 内容提供与布局解耦:你只负责提供“显示什么”,行布局、列跨度、动画全由组件自动处理。
💡 前提:接口返回的每行数据必须有一个能唯一标识行的字段(默认
id),否则控制台会警告且功能失效,检查逻辑见 Vuetable.vue。
⚙️ 核心属性一览
| 属性 | 作用 | 默认值 |
|---|---|---|
detail-row-callback | 生成明细 HTML 的回调方法名(模式一) | '' |
detail-row-component | 明细行组件名(模式二) | '' |
detail-row-id | 数据中唯一标识行的字段 | id |
detail-row-transition | 展开动画的过渡名 | '' |
detail-row-class | 明细行 CSS 类名 | vuetable-detail-row |
属性定义位于 Vuetable.vue。
优先级:同时设置两个模式时,组件模式生效(见 Vuetable.vue 的useDetailRowComponent)。
模式一:回调模式——返回 HTML 字符串
适合明细内容简单(几个字段、链接或按钮)的场景,只需三步:
- 在
<vuetable>上把detail-row-callback设为父组件里的方法名; - 该方法接收整行数据
item,返回一个 HTML 字符串; - vuetable 用
v-html把它注入明细行(模板位置:Vuetable.vue)。
核心调用逻辑在callDetailRowCallback(Vuetable.vue):
// 在父组件中按名字找到方法并调用,传入整行数据 return this.$parent[func].call(this.$parent, item)最简示例:
<vuetable api-url="/api/users" :fields="columns" detail-row-callback="renderDetailRow"></vuetable>methods: { renderDetailRow(item) { return '<p>电话:' + item.phone + ' | 城市:' + item.city + '</p>' } }✅ 适用:纯展示型明细、无复杂交互。
模式二:组件模式——挂载明细行组件
当明细内容较复杂(表单、按钮、嵌套列表)时,推荐组件模式:
- 全局注册一个 Vue 组件,例如
my-detail-row; - 把组件名传给
detail-row-component属性; - vuetable 会自动传入两个 props:
row-data(行数据对象)与row-index(当前页内序号)。
渲染位置见 Vuetable.vue。最小示例(完整版参考 examples/semantic.html):
Vue.component('my-detail-row', { props: { rowData: { type: Object, required: true } }, template: '<div class="detail-row">' + '<span>姓名:{{rowData.name}}</span>' + '<span>邮箱:{{rowData.email}}</span>' + '</div>' })<vuetable ... detail-row-component="my-detail-row" detail-row-id="id"></vuetable>✅ 适用:明细有自己的交互逻辑,或多张表复用同一份明细模板。
🖱️ 如何触发展开 / 收起
明细行默认不会自动展开,vuetable 提供两类触发方式。
1. 点击单元格时切换(最常用)
监听vuetable:cell-clicked事件,广播一条切换指令:
events: { 'vuetable:cell-clicked': function(data, field) { this.$broadcast('vuetable:toggle-detail', data.id) } }示例页正是用这个事件实现“点任意列都展开明细”(examples/semantic.html)。vuetable 支持的三条指令(Vuetable.vue):
| 广播事件 | 效果 |
|---|---|
vuetable:toggle-detail | 展开/收起切换 |
vuetable:show-detail | 强制展开 |
vuetable:hide-detail | 强制收起 |
2. 直接调用组件方法
用v-ref拿到组件引用后直接调用(Vuetable.vue):
this.$refs.vuetable.toggleDetailRow(rowId) // 切换 this.$refs.vuetable.isVisibleDetailRow(rowId) // 查询是否已展开💡 小技巧:isVisibleDetailRow()常配合回调使用,动态切换箭头图标(如 examples/semantic.html 中的 chevron)。另外,点击明细行本身会触发vuetable:detail-row-clicked事件(Vuetable.vue),可做“点内部再次收起”。
✨ 给展开加动画(可选)
通过detail-row-transition指定过渡名并编写对应 CSS。示例页的expand过渡只需几行(examples/semantic.html):
.expand-transition { transition: all .5s ease; } .expand-enter, .expand-leave { height: 0; opacity: 0; }模板中声明:detail-row-transition="expand"。
⚠️ 实战避坑清单
detail-row-id必须对应真实字段:默认id,若数据用的是uid等字段名,务必显式设置,否则明细行不生效;- 回调方法必须定义在父组件:
callDetailRowCallback只会在this.$parent上按名字查找,写错名字会直接报 console 错误; - 注意属性演进:老版本的
detail-row已在 v1.3.0 改为detail-row-callback,v1.5.0 起官方提示改用组件模式detail-row-component(见 README.md 的 Breaking Changes); - 翻页不会收起已展开的行:
visibleDetailRows存的是行 id,若希望翻页后全部收起,可在监听vuetable:load-success时广播vuetable:hide-detail。
📚 小结与相关文件
vue-table 的明细行本质是三个要素的组合:“行标识 + 可见状态数组 + 内容提供者(回调/组件)”。记住两个属性、一条事件,即可上手:
- 核心实现:src/components/Vuetable.vue
- 完整示例(组件模式 + 单元格点击展开 + 展开动画):examples/semantic.html
- 功能与属性变更记录:README.md
【免费下载链接】vue-table
data table simplify! -- vuetable is a Vue.js component that will automatically request (JSON) data from the server and display them nicely in html table with swappable/extensible pagination component.
相关推荐
Vue-Table数据表格组件终极完整教程
Vue Table数据表格组件终极完整教程 还在为Vue.js项目中的数据表格发愁吗?面对复杂的数据展示需求,手动编写表格代码既耗时又容易出错。今天,我将手把手
Element UI表格展开:Table行展开详细信息
Element UI表格展开:Table行展开详细信息 在数据展示场景中,表格(Table)是承载结构化数据的核心组件。当单条数据包含多级详情(如订单基本信息与
前端UI组件设计系统Vue无限滚动表格组件el-table-infinite-scroll完整使用教程
Vue无限滚动表格组件el table infinite scroll完整使用教程 el table infinite scroll是一个专为Vue和Eleme
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考