位置: 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)

  • win7全屏优化(win7全屏)(win7全屏优化怎么关)

    win7全屏优化(win7全屏)(win7全屏优化怎么关)

  • 查微信聊天记录方法介绍

    查微信聊天记录方法介绍

  • 红米k30屏幕120hz能调吗(红米k30屏幕什么材质)

    红米k30屏幕120hz能调吗(红米k30屏幕什么材质)

  • 小米视频怎么卸载(小米视频怎么卸载更新)

    小米视频怎么卸载(小米视频怎么卸载更新)

  • 电脑端微信聊天记录怎么查看(电脑端微信聊天记录迁移到别的电脑)

    电脑端微信聊天记录怎么查看(电脑端微信聊天记录迁移到别的电脑)

  • 苹果怎么看失效闪照(苹果怎么看有没有变质)

    苹果怎么看失效闪照(苹果怎么看有没有变质)

  • 闲鱼卖书扫不上isbn码(闲鱼卖书扫不上怎么回事)

    闲鱼卖书扫不上isbn码(闲鱼卖书扫不上怎么回事)

  • 浏览器看视频加载太慢(浏览器看视频加载失败怎么办)

    浏览器看视频加载太慢(浏览器看视频加载失败怎么办)

  • 华为笔记本怎么关机(华为笔记本怎么设置指纹解锁)

    华为笔记本怎么关机(华为笔记本怎么设置指纹解锁)

  • iphone阻止来电的短信(iPhone阻止来电的短信怎么看)

    iphone阻止来电的短信(iPhone阻止来电的短信怎么看)

  • qq群最多能加多少人为上限(qq群可以加多少人才满)

    qq群最多能加多少人为上限(qq群可以加多少人才满)

  • kindle可以看漫画吗(kindle上能看漫画吗)

    kindle可以看漫画吗(kindle上能看漫画吗)

  • ios12能降级吗(苹果12系统可以降级吗)

    ios12能降级吗(苹果12系统可以降级吗)

  • 主机TKG线插哪里(主机线在哪)

    主机TKG线插哪里(主机线在哪)

  • 苹果8plus怎么变横屏(苹果8p怎么改成像苹果x那样的操作)

    苹果8plus怎么变横屏(苹果8p怎么改成像苹果x那样的操作)

  • 苹果抬头灯怎么设置(苹果抬头灯怎么设置xr)

    苹果抬头灯怎么设置(苹果抬头灯怎么设置xr)

  • 手机6.39英寸是多少厘米(手机6.53英寸)

    手机6.39英寸是多少厘米(手机6.53英寸)

  • 通过快手号能查出对方的位置吗(通过快手号能查到抖音号吗)

    通过快手号能查出对方的位置吗(通过快手号能查到抖音号吗)

  • 企业微信怎么解绑个人微信(企业微信怎么解封)

    企业微信怎么解绑个人微信(企业微信怎么解封)

  • nfc怎么刷地铁(红米nfc怎么刷地铁)

    nfc怎么刷地铁(红米nfc怎么刷地铁)

  • 华为手环3pro开机键在哪(华为手环3e怎么开机视频)

    华为手环3pro开机键在哪(华为手环3e怎么开机视频)

  • 苹果6sp上市时间(苹果6s plus上市价格)

    苹果6sp上市时间(苹果6s plus上市价格)

  • 三星smg9650是国行吗

    三星smg9650是国行吗

  • 西瓜视频怎么涨粉(西瓜视频怎么涨信用分)

    西瓜视频怎么涨粉(西瓜视频怎么涨信用分)

  • 苹果输入法怎么打符号(苹果输入法怎么切换下一排)

    苹果输入法怎么打符号(苹果输入法怎么切换下一排)

  • 电脑直播需要什么设备(电脑直播需要什么条件)

    电脑直播需要什么设备(电脑直播需要什么条件)

  • 鸿蒙系统微电影创作功能怎么使用?鸿蒙微电影创作使用方法(鸿蒙可以看小电影吗)

    鸿蒙系统微电影创作功能怎么使用?鸿蒙微电影创作使用方法(鸿蒙可以看小电影吗)

  • 小米MINI路由器的硬盘的详细教程(小米mini路由器mesh)

    小米MINI路由器的硬盘的详细教程(小米mini路由器mesh)

  • 卡克斯劳塔宁阿克蒂克度假酒店的玻璃圆顶冰屋,芬兰萨里山  (© Lingxiao Xie/Getty Images)(卡克斯劳坦恩酒店)

    卡克斯劳塔宁阿克蒂克度假酒店的玻璃圆顶冰屋,芬兰萨里山 (© Lingxiao Xie/Getty Images)(卡克斯劳坦恩酒店)

  • 附加税的内容有哪些
  • 民非企业开通捐赠
  • 所得税预缴申报表资产总额怎么填
  • 一般纳税人没有进项怎么交税
  • etc怎么取过路费啊
  • 净现值率和现值指数之间的关系
  • 印花税退税流程怎么操作
  • 个人所得税核定征收税率表
  • 房产税的纳税义务
  • 关税的增值税计算公式
  • 航天金税交499
  • 购买的职业险计入哪个科目
  • 建筑工程居间服务协议
  • 福利费实物发放标准
  • 增值税销项发票冲红怎么冲
  • 企业开具的增值税专用发票属于
  • 营改增转让土地税收政策
  • 旅行社代订机票怎么做账
  • 石家庄国税发票查验平台
  • 兼营免税业务,如何才能享受免税的优惠政策?
  • 金税盘不能清卡是啥原因
  • 职工福利费当年怎么扣
  • 个税申报所属期和所得期
  • 外商投资的企业是外资企业吗
  • 企业购入存货分录
  • 应收账款周转天数正常范围
  • 所得税年报报完了怎么更正季报
  • 发票丢失登报声明怎么写
  • 旧税号的发票专用章还能使用吗
  • 外贸企业内销与外销对比
  • 园林绿化工程公司有哪些
  • 企业职工教育经费
  • linux killall
  • 进项税额转出是负数是什么意思
  • 增值税即征即退2023政策
  • 每季度预缴所得税怎么算
  • 交易性金融资产是什么意思
  • 累积带薪缺勤的原因分析
  • 辅助生产成本如何结转
  • 明细账是什么样子
  • jquery向下滑动元素
  • 承担客户车辆维修责任
  • 商品入库进项税额怎么算
  • 公司员工个人所得税交多少
  • php实现页面浏览量
  • 关于商业承兑汇票的多选题有哪些
  • php无限分类实现不实用递归
  • 水电费是收据能入账不
  • 未抵扣增值税需结转吗
  • sqlserver数据类型转换函数
  • 织梦怎么建站
  • 法人治理结构是指明确
  • 余额百分比法计提坏账准备
  • 增值税要计入应收账款吗
  • PostgreSQL教程(十五):系统表详解
  • 对公账户取钱该怎么取钱
  • 上年亏损次年赢亏怎么算
  • 应收票据周转率公式
  • 盈余公积转增实收资本对会计要素的影响
  • 票面利率大于市场利率,则发行价格一定( )面值
  • 过期食品返厂会重新打日期吗
  • 明细账要如何做账
  • 被征用的不动产或者动产使用后应当怎样
  • sql like多个
  • 过滤重复字符串
  • sqlserver通用的删除服务器上的所有相同后缀的临时表
  • mac音频设置在哪里
  • win8.1系统升级win10
  • unix命令大全
  • win10字体边缘模糊
  • xp系统怎么设置自动重启
  • nmstt.exe - nmstt是什么进程 有什么用
  • shell在linux
  • unity摄像机范围
  • node.js抓包
  • shell 记录日志
  • node优秀库
  • 互联网服务业有哪些行业
  • 代扣代缴企业所得税手续费
  • 个体工商户开发票怎么开
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设