今天该下班的时候出现一个bug,按照官方给出的api,this.$refs.tree2.setCheckedKeys([])并没有完全修改左侧的修改状态,下面先展示一下正确的情况和出现bug的情况
一.页面展示
1.页面逻辑
在这里插入图片描述
2.正确情况
在这里插入图片描述
3.错误情况
在这里插入图片描述

二、问题分析
分析出现错误的情况,只有【测试1】这个用户的选中状态未被修改,而【测试1】这个用户同时也在下面【分组二】这个分组中,怀疑是不是因为又在别的分组存在,选中状态才不会被修改的,于是又在【分组一】分组中添加了几个【分组二】中存在的用户,相同的操作,看是什么情况
在这里插入图片描述
确实,只有存在不同的分组的时候就不会被修改选中状态,查看elementui的官方文档,node-key来标识树的节点,在这棵树中出现了相同的id,这是不允许的。所以才不会处理这个节点在这里插入图片描述三、改bug
后端返回的数据结构中的子数据不是放在children这个字段的,而是放在users这个字段,而elementui中又要识别children属性,在前端需要添加一个children属性,

getusergroup().then((res) => {
        this.TreeData = res //拿到所有的分组
        for (var i = 0; i < res.length; i++) {//给分组添加children属性
          this.$set(this.TreeData[i], 'children', res[i].users.map((item)=>{//同时添加treeId字段来唯一标识树的节点
            item.treeId =i+'p'+item.id;//i表示分组的下标,id是用户的id,拼接‘p’,表示字符串拼接
            return item
          }))
        }
      }

这样每个节点就有唯一的id了,然后用node-key绑定treeId即可
在这里插入图片描述
打印treeId看一下:
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐