位置: IT常识 - 正文

保姆级教程:Ant Design Vue中 a-table 嵌套子表格(保姆级教程什么意思)

编辑:rootadmin
保姆级教程:Ant Design Vue中 a-table 嵌套子表格

推荐整理分享保姆级教程:Ant Design Vue中 a-table 嵌套子表格(保姆级教程什么意思),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:保姆级教程起诉健身房,保姆级教程舞蹈,保姆级教程舞蹈,保姆级教程什么意思,保姆级教程分享,保姆级教程分享,保姆级教程分享,保姆级教程什么意思,内容如对您有帮助,希望把文章链接给更多的朋友!

前端为Ant Design Vue 版本为1.6.2,使用的是vue2

Ant Design Vue中 a-table 嵌套子表格,说的可能稍微墨迹了点,不过重点内容都说的比较详细,利于新人理解,高手可以自取完整代码

内容概述:完成样式及完整代码展示子表格嵌套只打开一个嵌套表格完成样式及完整代码展示保姆级教程:Ant Design Vue中 a-table 嵌套子表格(保姆级教程什么意思)

下图为官网图,会在每行最前面多一个加号,点击后会展开,看到子表格的数据

<template> <div> <a-card> <a-table :columns="columns" :data-source="datasource" :bordered="true" :expandedRowKeys="expandedRowKeys" @expand="getInnerData" :pagination="pagination"> <a-table slot="expandedRowRender" slot-scope="text" :columns="innerColumns" :data-source="inndata" :pagination="false"></a-table> <span slot="operation" slot-scope="text, record"> <a-button type="primary" icon="unordered-list" @click="getData(record)"> 详情 </a-button> </span> </a-table> </a-card> </div></template><script>import { axios } from '@/utils/request'const columns = [ { title: '序号', dataIndex: 'id', key: 'id', }, 。。。。。中间省略 { title: '操作', key: 'operation', width: '80px', scopedSlots: { customRender: 'operation' }, },];const innerColumns = [ { title: '子表单列', dataIndex: 'XXX', key: 'XXX', },];const inndata = [];export default { data() { return { datasource: [], columns, innerColumns, inndata, expandedRowKeys:[], pagination: { //分页 showSizeChanger: true, //是否分页 curPageSizeIndex: 0, pageSize: 10, //一页显示多少条 // total: 1, //总条数 current: 1, //当前显示页面 pageSizeOptions: ['10', '20', '30'], showTotal: (total) => `共计 ${total}条`, //显示总数 onShowSizeChange: (current, pagesize) => { this.pagination.current = current this.pagination.pageSize = pagesize this.options.offset = (current - 1) * pagesize this.options.limit = pagesize this.refreshData() }, onChange: (current, pageSize) => { this.pagination.current = current this.options.offset = (current - 1) * pageSize this.options.limit = pageSize this.refreshData() }, }, } }, mounted() { this.refreshData() }, methods: { refreshData() { axios({ url: 'url', method: 'post', }).then((res) => { if (res.errCode > 0) { this.$notification.error({ message: '错误信息', description: res.errMsg, }) return } console.log(res, '数据') this.datasource = res }) }, getInnerData(expanded, record) { this.expandedRowKeys=[] if (expanded) { var b = '' b=(record.id-1).toString() this.expandedRowKeys.push(Number(b.slice(-1))) this.inndata = []; this.inndata.push(this.datasource[record.id - 1]) } }, getData(record) { console.log(record); }, },}</script><style scoped></style>子表格嵌套

子格嵌套从代码层简单理解就是一个<a-table></a-table>中套了一个<a-table></a-table>,即<a-table><a-table></a-table></a-table>,当然,这只是一个简单理解,并不是这样写,要在其中添加一些东西。 抛开一些配置项,解释下:

<template> <div> <a-card> // 这里开始是父表格组件,columns -> 父级列名,datasource -> 父级表中的数据, @expand="getInnerData" -> 点开子表单的操作函数,pagination -> 分页的设置 <a-table :columns="columns" :data-source="datasource" @expand="getInnerData" :pagination="pagination"> // 这里开始是子表格组件,slot="expandedRowRender" 重点,必须有,innerColumns-> 子级列名,inndata-> 子级表中的数据, <a-table slot="expandedRowRender" slot-scope="text" :columns="innerColumns" :data-source="inndata" :pagination="false"></a-table>// 这里是子表格组件结尾 // 这里是父表格span,不用的可以删掉 <span slot="operation" slot-scope="text, record"> <a-button type="primary" icon="unordered-list" @click="getData(record)"> 详情 </a-button> </span> </a-table>// 这里是父表格组件结尾 </a-card> </div></template><script>// 数据请求axios import { axios } from '@/utils/request'// 设置父级列名const columns = [ { title: '序号', dataIndex: 'id', key: 'id', }, 。。。。。中间省略 { title: '操作', key: 'operation', width: '80px', scopedSlots: { customRender: 'operation' }, },];// 设置子级列名const innerColumns = [ { title: '子表单列', dataIndex: 'XXX', key: 'XXX', },];// 设置子级数据,写下面data里也行const inndata = [];export default { data() { return { datasource: [], columns, innerColumns, inndata, pagination: { //分页 showSizeChanger: true, //是否分页 curPageSizeIndex: 0, pageSize: 10, //一页显示多少条 // total: 1, //总条数 current: 1, //当前显示页面 pageSizeOptions: ['10', '20', '30'], showTotal: (total) => `共计 ${total}条`, //显示总数 onShowSizeChange: (current, pagesize) => { this.pagination.current = current this.pagination.pageSize = pagesize this.options.offset = (current - 1) * pagesize this.options.limit = pagesize this.refreshData() }, onChange: (current, pageSize) => { this.pagination.current = current this.options.offset = (current - 1) * pageSize this.options.limit = pageSize this.refreshData() }, }, } }, mounted() { // 进入页面直接运行的函数 this.refreshData() }, methods: { // 异步请求获取数据 refreshData() { axios({ url: 'url', method: 'post', }).then((res) => { if (res.errCode > 0) { this.$notification.error({ message: '错误信息', description: res.errMsg, }) return } console.log(res, '数据') // 将数据赋值给父级表格 this.datasource = res }) }, // 点开子级表格(就是点击那个加号)触发的函数 getInnerData(expanded, record) { // 判断是否点开 if (expanded) { // 点开后执行。。。 // 先将子级表格数据清空,否则之前点开别的行的数据也会在里面 this.inndata = []; // 再将父级点击的那一行的数据(record)给子级数据存进去,具体情况根据自己需求更改 this.inndata.push(record) } },// 点击父级表格表格span,也就是那个“详情”按钮触发的函数 getData(record) { console.log(record); }, },}</script><style scoped></style>

通过上述操作会发现能够实现基本的子表格嵌套,但是会发现点开一个子表单后,再点一个,两个都会打开,但是里面的子表格数据是相同的,这就是个很大的问题,为了解决这个问题,请看下面,这个在官网没直接写出来,API里有相关的参数,现在告诉你应该怎样操作

只打开一个嵌套表格

为了防止点开多个子表格内容相同,再结合我自己的使用场景,我只需要展开一个子表格就行,也就是说点开新的子表格后,原来的子表格自动关闭 下面把需要改动的代码片段给你们: 1. 父级中的修改内容

// 添加 :expandedRowKeys="expandedRowKeys" 目的是使expandedRowKeys只有最新点开子表单的key<a-table :columns="columns" :data-source="datasource" :bordered="true" :expandedRowKeys="expandedRowKeys" @expand="getInnerData" :pagination="pagination"> <a-table slot="expandedRowRender" slot-scope="text" :columns="innerColumns" :data-source="inndata" :pagination="false"></a-table> <span slot="operation" slot-scope="text, record"> <a-button type="primary" icon="unordered-list" @click="getData(record)"> 详情 </a-button> </span> </a-table>

2. 在data里加上空的 expandedRowKeys

export default { data() { return { datasource: [], columns, innerColumns, inndata, // 添加空的expandedRowKeys expandedRowKeys:[], 。。。。。。

3. 修改getInnerData函数

getInnerData(expanded, record) { // 先将expandedRowKeys数据清空 this.expandedRowKeys=[] if (expanded) { // 将父级的第几条数据传到expandedRowKeys里,我这用的是数据表里的id处理的,我的id是从1开始 // 我这是一页十条数据,要放入0-9,第一条是0,第十条是9,一定要是数字格式 // 再一个,注意下,假设使用的是数据中的第45条,record.id=45 // 但是传入 expandedRowKeys 只能是0-9,且是数字格式,那么应该将数字4传到expandedRowKeys中 // 因为record.id=45这条数据,在表格中的第五行,应该是4 // 所以有了下面的record.id-1,再转成字符串格式,取最后一位,再转成数字 // 也有人用key,id能够获取到,不过我没弄成功,就这样吧,实现功能就行 var b=(record.id-1).toString() this.expandedRowKeys.push(Number(b.slice(-1))) // 下面两行说过,我就把注释直接粘过来了 // 先将子级表格数据清空,否则之前点开别的行的数据也会在里面 this.inndata = []; // 再将父级点击的那一行的数据(record)给子级数据存进去,具体情况根据自己需求更改 this.inndata.push(record) } },
本文链接地址:https://www.jiuchutong.com/zhishi/298673.html 转载请保留说明!

上一篇:openCV实践项目:拖拽虚拟方块(opencv项目开发实战)

下一篇:在vue中使用echarts(vue中用echarts)

  • edge如何删除hao123强制首页(edge如何删除hao360强制首页)

    edge如何删除hao123强制首页(edge如何删除hao360强制首页)

  • qq浮窗设置的步骤是什么(qq开启浮窗)

    qq浮窗设置的步骤是什么(qq开启浮窗)

  • 微信视频扬声器怎么关(微信视频扬声器关闭怎么打开)

    微信视频扬声器怎么关(微信视频扬声器关闭怎么打开)

  • 腾讯视频昵称审核要多久(腾讯视频的昵称)

    腾讯视频昵称审核要多久(腾讯视频的昵称)

  • 京东阅读和京东读书的区别(京东阅读和京东的区别)

    京东阅读和京东读书的区别(京东阅读和京东的区别)

  • ddr2有4g内存条吗(ddr2有没有4g内存条)

    ddr2有4g内存条吗(ddr2有没有4g内存条)

  • 华为实名认证能找回账号吗(华为实名认证能解除吗)

    华为实名认证能找回账号吗(华为实名认证能解除吗)

  • 华为畅享10e支持指纹和人脸识别吗(华为畅享10e支持OTG功能吗)

    华为畅享10e支持指纹和人脸识别吗(华为畅享10e支持OTG功能吗)

  • 苹果11左下角喇叭不响(iphone11左下角喇叭)

    苹果11左下角喇叭不响(iphone11左下角喇叭)

  • 物理机和虚拟机的区别(物理机和虚拟机怎么共享文件)

    物理机和虚拟机的区别(物理机和虚拟机怎么共享文件)

  • 苹果笔记本触摸板失灵(苹果笔记本触摸板怎么右键)

    苹果笔记本触摸板失灵(苹果笔记本触摸板怎么右键)

  • 为什么电脑上会有腾讯影视库(为什么电脑上会出现很多文件)

    为什么电脑上会有腾讯影视库(为什么电脑上会出现很多文件)

  • reno2和reno2z的区别(reno2和reno2z的区别手机壳)

    reno2和reno2z的区别(reno2和reno2z的区别手机壳)

  • 充话费充到空号怎么办(充话费充到空号了)

    充话费充到空号怎么办(充话费充到空号了)

  • 抖音要审核多久(抖音审核多久上热门)

    抖音要审核多久(抖音审核多久上热门)

  • 苹果七机身多少厘米(苹果七机身厚度是多少)

    苹果七机身多少厘米(苹果七机身厚度是多少)

  • ps怎么把红底变成白底(ps怎么把红底变成白底照片)

    ps怎么把红底变成白底(ps怎么把红底变成白底照片)

  • 苹果x突然没声音怎么回事(苹果x突然没声音了怎么回事)

    苹果x突然没声音怎么回事(苹果x突然没声音了怎么回事)

  • 电脑cpu温度多少正常(电脑cpu温度多少是正常范围)

    电脑cpu温度多少正常(电脑cpu温度多少是正常范围)

  • vivo手机usb怎么打开(vivo手机usb怎么调试)

    vivo手机usb怎么打开(vivo手机usb怎么调试)

  • col al10华为是什么型号(华为cor_al10是什么型号)

    col al10华为是什么型号(华为cor_al10是什么型号)

  • 最右为什么刷新不出来(最右app怎么刷新不了了)

    最右为什么刷新不出来(最右app怎么刷新不了了)

  • word怎么设置纸型(word怎么设置纸型16开)

    word怎么设置纸型(word怎么设置纸型16开)

  • 小红书被限流怎么恢复(小红书被限流怎么解除)

    小红书被限流怎么恢复(小红书被限流怎么解除)

  • 挂式耳机正确戴法(挂耳式耳机用法)

    挂式耳机正确戴法(挂耳式耳机用法)

  • 光纤布线有什么注意事项(光纤布线有什么作用)

    光纤布线有什么注意事项(光纤布线有什么作用)

  • vite + vue + ts 自动按需导入 Element Plus组件,并如何解决按需引入后ElMessage与ElLoading 的问题(找不到名称“ElMessage”问题。)

    vite + vue + ts 自动按需导入 Element Plus组件,并如何解决按需引入后ElMessage与ElLoading 的问题(找不到名称“ElMessage”问题。)

  • 【1】从零开始学习目标检测:YOLO算法详解(小说《从零开始》)

    【1】从零开始学习目标检测:YOLO算法详解(小说《从零开始》)

  • 翻译: 详细图解Transformer多头自注意力机制 Attention Is All You Need(图幅翻译)

    翻译: 详细图解Transformer多头自注意力机制 Attention Is All You Need(图幅翻译)

  • 政府收回土地补偿款是否缴纳土地增值税
  • 小规模季度不超过30万是含税还是不含税
  • 一般纳税人开具的普票可以抵扣吗
  • 水利建设基金怎么交
  • 记账错误怎么办
  • 应收账款逾期未收回账务处理
  • 固定资产登记在三栏式吗
  • 有金额的框架协议要交印花税吗
  • 所得税补缴怎么回事
  • 行政事业单位计提折旧起始日
  • 营业成本包括三大费用如何称呼
  • 豆粕适用税率
  • 工会经费拨缴是什么意思
  • 新公司法注册资本认缴制
  • 床位周转率计算公式
  • 顾客抽奖代扣个税账务处理
  • 个体户季度报税表怎么填
  • 施工单位给你钱敢领吗
  • 地方教育费附加减免政策
  • 应交税费应交增值税减免税款
  • 电子税务局进项票汇总
  • 递延所得税资产怎么计算
  • 开了发票未收款
  • 公司采购商品支付货款未开票会计分录
  • 库存周转天数计算实例
  • 建筑业可以开电费发票吗
  • 营业收入存入银行分录
  • windows安装程序无法配置在硬件上
  • 在windows7提供了一种什么技术
  • 用人单位发放工资时跨行手续费应由谁支付
  • u启动u盘怎么装系统
  • 委托代销委托方的账务处理
  • ntfs文件夹权限高于文件权限
  • 一般纳税人增值税优惠政策2023
  • php异常处理和错误处理
  • php能开发微信小程序吗
  • 纽约公共图书馆开放时间
  • 生产企业免抵退税实例
  • 公司有收入可不交社保吗
  • 公司的基本户怎么换
  • mysql安装总结
  • 装订会计凭证步骤
  • 普通发票需要做合同才能开吗
  • 企业应纳税总额怎么算
  • 哪个命令可以对mysql数据库做完全备份
  • 金税四期对会计人员要求高吗
  • 小规模纳税人开专票需要交税吗
  • 进口货物的会计分录
  • 现金核算如何进行账务处理
  • 应收账款收不回来
  • 股权转让如何缴纳个税
  • 老板垫付货款
  • 双击盘符弹出属性
  • 怎么用ubuntu
  • 如何搭建一台内网服务器
  • 电脑硬件用途
  • win xp怎么样
  • linux如何修改文件创建时间
  • windows7显示桌面的操作方法
  • xp系统内存占用多少
  • win7怎么随便放桌面图标
  • win7小键盘数字键不能用怎么办
  • win7系统运行速度提升
  • win8怎么一开机就进入桌面
  • win10 edge浏览器崩溃
  • win10微软更新
  • 5个小技巧让你成长
  • windows10电量图标消失了怎么还原
  • qt::windowtype
  • Python的flask框架教程
  • powershell实战指南
  • javascript简明教程
  • jquery 弹出页面
  • 快速掌握英语的方法
  • 变更税务局三方协议
  • 市直单位正职是市单位一把手吗
  • 韩国快递关税
  • 高级人民法院党组书记级别
  • 山东地方税务局官网
  • 河南助学金申请表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设