使用Ts来动态配置表格:
- 为什么?
- 通过json对象的形式传递给table标签去循环遍历,就不用写每一列的标签了,代码简洁
- 在ts对象配置了某个属性时,在json对象添加时会有提示,方便开发
插槽来实现编辑单元格
表头拖拽
跨页选中、全选:
- 全选:比较简单,拿到所有的数据进行遍历(data.map),使用toggleRowSelection给每一项设置true就为选中,反之不选,清空所有选中clearSelection
- 跨页选中:table必须设置row-key,值为数据的唯一标识,然后触发selectionChange(rows),rows为选中的数据
动态合并表头、单元格、列:
- 动态合并表头:使用el-table的header-cell-style属性可以获取每一列、行的信息,以此来动态的隐藏前几列,只留下一列表头
- 合并列(左右)单元格:通过span-methods属性,同样能获取行列信息,合并单元格和表头的逻辑差不多,都是通过隐藏前几个,最后的单元格通过colspan、rowspan来设置单元格占几行几列(不管是上下、还是左右相邻单元格)
- =====》遇到的bug:表头拖拽是根据表头的顺序来进行逻辑互换,但是相邻(左右)单元格的合并是动态的去删除某一个单元格,这时拖拽就会出现表格错乱的问题
树形行数据懒加载:
-
因为数据量比较多,所以使用点击行展示更多的二三级数据,而不是一次性展示全部
-
实现:
(重点就是hasChildren在数据中设置就代表有子级数据,然后通过load事件来动态的给子级赋值)
- ===》遇到的问题:(1)对table数据进行增上改查操作之后,表单视图不刷新,实际数据已经更新
原因:改成懒加载,加载数据很快,但是展开的子菜单数据已被缓存,再次点击就不会重新请求后端
解决思路:====》刚开始想着数据增删改之后,重新对页面进行刷新,但是这样用户体验很不好,重新查看的话还需要用户手动的一层一层点击展开,去找到想看的数据,非常麻烦 ====》所以想着刷新当前修改节点即可,element的文档提供的10几个api都没有提供可以更新节点的方法,在百度查询到 ,可以拿到table的实例(ref)之后,调用 tableRef.value.store.states.lazyTreeNodeMap.value,这个api代表表格的懒加载数据都存放在这,可以对它进行修改,页面就会刷新
- ===》遇到的问题:(2)筛选按钮联动用户体验不好,有二级数据的,选中时,子级数据的筛选框不选中
原因:elementplus的bug
解决思路:====》首先想通过拿到checkbox实例,看看能不能调用实例里面自带的属性方法来实现勾选,但是没有提供 ====》后来想换ui组件,因为其他网站ui这个树形选中没问题,被领导驳回,而且ui的样式风格也有差异,用户体验不好 ====》只能重写表格的选中逻辑,自带的去掉,重新写完组件插入到第一列
连带的问题: 重写选中框的逻辑之后,导致之前的跨页选中、全选出现了bug