Element中Table表格树形数据的展示问题

Element中Table表格树形数据的展示问题

在做一个将100个员工数据按6组展示时,发现在后端处理好数据正常返回给前端,前端无法正常显示,打开F12检查网页时能发现数据是正常传递的:
在这里插入图片描述

首先先去查看官方文档上对于Table表格树形数据的定义(这里注意先检查自己使用的element版本和官方文档选择的版本是否一致,版本不同的情况下有些语法是不支持的):支持树类型的数据。此时,必须要指定 row-key
在这里插入图片描述

row-key属性实际的作用是标识表格每行数据是通过哪个属性来进行区别的,一般而言id比较常见。在这里我使用groupId
在这里插入图片描述

首先要明确的是,数据是在后端就分好了层次而非在前端进行分层,前端传递数据时只需传递已经封装好的List集合,通过一个空的数组去接收。再通过指定这个row-key的值,来识别根据哪个属性是进行分层。
在这里我后端进行分层的方法是:先将我的员工类的对象存入到一个List集合中,再定义一个Result类为最终结果类:这个最终结果类中有两个属性,groupId属性和List属性。然后将这个Result也存入一个List集合中即List<Result>,Result中又有groupIdList<员工类>两个属性,这样就完成了分层。
我这里将row-key设置为groupId,根据小组的编号来进行分层。但是要注意row-key设置的这个字段,我们使用的集合中的实体类中必须定义这个字段,例如此处我应该在我的员工类和最终结果类中定义属性private Integer groupId,否则会报rowKey is required的错误信息。
在这里插入图片描述

但是设置好分层的key并在实体类中创建好key的属性后,又出现了一个报错:
在这里插入图片描述

这个错误是因为key的属性冲突导致的,在官网的定义是:有相同父元素的子元素必须有独特的 key。重复的 key 会造成渲染错误。因为在我的返回结果中,每个员工的信息都为一个子元素,他们共同的父元素为children这个list集合,在给员工类定义了groupId这个属性作为row-key后,我们要保证每个子元素的groupId都是独一无二的;
其次在我的员工类和最终返回前端的List集合中的结果类中,必须同时拥有groupId这个属性,否则还会出现rowKey is required这个报错,且也要保证结果类groupId的值和与员工类groupId的值都是独一无二的,否则还会出现key属性冲突的报错。
在这里我使用了将员工staffId赋值给员工的groupId,虽然这个做法从业务逻辑的角度讲并不合适,因为这俩东西不应该是一样的,但是此处的员工的groupId就不能理解成是一个小组的编号了,这个groupId具有的实际意义是帮助实现分层,所以一定要是独一无二的。

最终,解决了这些报错后,数据就可以正常显示:
在这里插入图片描述

console中也不会显示前端报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在Element UI的树形表格,如果需要实现父级数据有复选框而子级数据没有复选框的效果,可以通过添加相应的类来控制样式,设置display: none来隐藏子级的复选框。可以利用Table Attributes属性的cell-class-name属性,通过判断来筛选需要隐藏复选框的行。具体的代码如下所示: ```html <el-table @selection-change="handleSelectionChange" ref="multipleTable" row-key="id" :data="tableData" v-loading="listLoading" border class="table-wrap" stripe :cell-class-name="cellcb"> <el-table-column align="center" type="selection" :resizable="false" width="60" ></el-table-column> ... </el-table> ``` ```javascript ... methods: { // 隐藏子级复选框 cellcb(row) { // 此处判断条件可以根据业务需求进行调整 if (!row.row.children) { return 'myCell' } }, } ... ``` ```css <style lang="less"> .myCell .el-checkbox__input { display: none; } </style> ``` 这样就可以实现父级数据有复选框而子级数据没有复选框的效果。\[1\] 另外,如果需要一次性从后端接口获取显示的数据,可以使用Element UI的相关方法,例如@select、@select-all和@selection-change等事件来处理复选框的选择。具体的方法可以参考Element UI官方文档。\[2\] 如果需要实现懒加载函数,可以使用async/await来延迟加载数据。例如,可以使用async/await来延迟加载子级数据,并通过setNewRowData方法将加载的数据设置给对应的行。具体的代码如下所示: ```javascript async loadSearch(row, treeNode, resolve) { const loadData = \[ { id: 3100, date: '2016-05-01', name: '王小虎', address: '上海市普陀区金沙江路 1519 弄' }, { id: 3200, date: '2016-05-01', name: '王小虎', address: '上海市普陀区金沙江路 1519 弄' } \] await setTimeout(() => { resolve(loadData) }, 2000) await this.setNewRowData(row, loadData) }, setNewRowData(row, loadData) { row.children = loadData } ``` 这样就可以实现懒加载函数的效果。\[3\] #### 引用[.reference_title] - *1* [Element ui 树形表格+复选框](https://blog.csdn.net/VanChaoi/article/details/117781083)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [第九篇 Elementui 树形表格多选问题-多级树形表格懒加载复选框勾选问题](https://blog.csdn.net/Yzt_199626/article/details/117089321)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值