组件库antd里面的树型选择不能做到勾选父组件然后一起勾选子组件情况,我也不知道是组件库的问题还是原本设计就是这样

刚好组件库存在rowselection的配置项,既然存在拓展方法,又遇到需求,那么就对数据进行处理了

以下方法临时起意编写,可能有些地方没有考虑的很完善,也可以有些代码冗杂,不过方法是可以正常使用的,由于用到了递归,对于数据规模大的话来说可能就没那么快

由于是在封装a-table的基础上进行修改,基本功能和a-table是一样的

首先对于勾选的选中和取消,这里耗费的事件会比较多,现在的方法还算是完善的,就是长得不好看

  1. onSelect(record, selected, selectedRows) { // selected 判断是否勾选
  2. if (selected) {  // 添加当前节点和子节点,使其勾选
  3. this.selectedRowKeys.push(record.id)  // 添加当前点击的节点
  4. this.selectedRows.push(record.value)  // 添加当前点击的节点的数据
  5. if (!Com.isEmpty(record.children)) {  // 这里的isEmpty方法是判断是否为空,当然也可以判断他的长度==0
  6. record.children.forEach(item => {
  7. if (item.children) { // 如果存在子节点,进行递归
  8. this.onSelect(item, true)
  9. }
  10. this.selectedRows = [...this.selectedRows, item.value]
  11. this.selectedRowKeys.push(item.id)
  12. })
  13. // 去重
  14. this.selectedRows = [...new Set(this.selectedRows)]
  15. this.selectedRowKeys = [...new Set(this.selectedRowKeys)]
  16. }
  17. } else {  // 取消勾选,清空当前节点和子节点
  18. this.selectedRowKeys.splice(this.selectedRowKeys.indexOf(record.id), 1);
  19. this.selectedRows.splice(this.selectedRows.indexOf(record.id), 1)
  20. if (!Com.isEmpty(record.children)) {
  21. this.selectedRowKeys.splice(this.selectedRowKeys.indexOf(record.id), 1);
  22. this.selectedRows.splice(this.selectedRows.indexOf(record.id), 1)
  23. record.children.forEach(item => {
  24. if (item.children) {
  25. this.onSelect(item, false)
  26. }
  27. let index = this.selectedRowKeys.indexOf(item.id)
  28. this.selectedRows.splice(index, 1)
  29. this.selectedRowKeys.splice(index, 1)
  30. })
  31. }
  32. return false
  33. }
  34. },

对于上面的勾选与取消,会导致一个问题,就是全选按钮也不能实现全部取消或者全部勾选,于是乎全选事件也得重新写,全选事件其实还好,就是遍历完然后将key和数据添加到两个数据里面去而已

  1. // 全选操作---自定义选中操作导致全选操作失效,从而有这个方法
  2. onSelectAll(selected, selectedRows, changeRows) {
  3. if (selected) {
  4. let rows = []
  5. let arr = []
  6. selectedRows.forEach(item => {
  7. arr.push(item.id)
  8. rows.push(item.value)
  9. })
  10. this.selectedRows = rows
  11. this.selectedRowKeys = arr
  12. } else {
  13. this.selectedRows = []
  14. this.selectedRowKeys = []
  15. }
  16. }

最后还有一个默认展开整棵table树的方法也是递归

使用的是这里的属性赋值

  1. fnChildren(data) { // 这里的data是table的树数据
  2. data.forEach((val, index, arr) => {
  3. this.expandedKeys.push(val.id)
  4. if (!Com.isEmpty(val.children)) { // 判断是否为空 也就是判断还是否存在子节点
  5. val.children = this.fnChildren(val.children)
  6. }
  7. })
  8. return data
  9. },

有想法或者建议可以留言

Antd组件Table树型多选全选问题的更多相关文章

  1. MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框

    1.MVC身份验证. 有两种方式.一个是传统的所有控制器继承自定义Control,然后再里面用MVC的过滤器拦截.所以每次网站的后台被访问时.就会先走入拦截器.进行前端和后端的验证 一个是利用(MVC ...

  2. Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色

    上次介绍过CRM里开始报表的一些注意事项:Dynamic CRM 2013学习笔记(十五)报表入门.开发工具及注意事项,本文继续介绍报表里的一些动态效果:动态显示参数,参数是从数据库里查询出来的:参数 ...

  3. 基于JQ的多选/全选/反选及获取选中的值

    <!-- author:青芒 --> <!DOCTYPE html> <html lang="en"> <head> <met ...

  4. Android 实现自己定义多级树控件和全选与反选的效果

    博文開始之前,首先要感谢大牛:(lmj623565791),本博文是在其博文http://blog.csdn.net/lmj623565791/article/details/40212367基础上进 ...

  5. UITableView多选全选

    自定义cell和取到相应的cell就行了 TableViewCell.h #import <UIKit/UIKit.h> @interface TableViewCell : UITabl ...

  6. Jquery 多选全选/取消 选项卡切换 获取选中的值

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. vue-element 动态单选多选全选

    实现效果如图 数据格式如下: pps: [{"code":"6","createTime":"2018-09-07 00:00:0 ...

  8. checkout 多选 全选(亲测有效)

    <input type="button" id="btn1" value="全选"> <input type=" ...

  9. js分类多选全选

    效果如图: HTML代码: <div class="form-group quanxian-wrap"> <label>项目</label> & ...

随机推荐

  1. Improving Adversarial Robustness via Channel-Wise Activation Suppressing

    目录 概 主要内容 代码 Bai Y., Zeng Y., Jiang Y., Xia S., Ma X., Wang Y. Improving adversarial robustness via ...

  2. 对比显示每条线路的价格和该类型线路的平均价格,分别使用子查询和 exists 获取线路数量

    查看本章节 查看作业目录 需求说明: 对比显示每条线路的价格和该类型线路的平均价格 分别使用子查询和 exists 获取线路数量超过"出境游"线路数的线路类型信息,要求按照线路数升 ...

  3. js 拟写登录页 可以拖动登录框

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. JSR-303规范

    规范链接 CONSTRAINT 详细信息 @Valid 被注释的元素是一个对象,需要检查此对象的所有字段值 @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null ...

  5. 解析HetuEngine实现On Yarn原理

    摘要:本文介绍HetuEngine实现On Yarn的原理,通过阅读本文,读者可以了解HetuEngine如何在资源使用方面融入Hadoop生态体系. 本文分享自华为云社区<MRS HetuEn ...

  6. 服务监控 | 彻底搞懂Dropwizard Metrics一篇就够了

    Metrics是一个提供服务性能检测工具的Java类库,它提供了功能强大的性能指标工具库用于度量生产环境中的各关键组件性能. 度量类型 Metrics提供了以下几种基本的度量类型: Gauge:用于提 ...

  7. day 10 删除空白字符

    (1).有以下程序(大写变小写) (2).有以下程序,在[1]填写程序,使得程序正确运行. 分析:(*p)(int,int)是一个函数指针(一个指针[*p]指向的对象是一个函数),函数的形参是(int ...

  8. 毫米转像素dpi

    public static double MillimeterToPixel_X(double length) //length是毫米,1厘米=10毫米 { System.Windows.Forms. ...

  9. 三张图秒懂Redis集群设计原理

    转载Redis Cluster原理 转载https://blog.csdn.net/yejingtao703/article/details/78484151 redis集群部署方式: 单机 主从 r ...

  10. JDK并发工具类

    在JDK的并发包里提供了几个非常有用的并发工具类.CountDownLatch.CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程 ...