文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

解决elementUI中el-tree树形结构中节点过滤的问题

2023-05-17 08:35

关注

elementUI中el-tree树形结构中节点过滤

业务需求

vue项目,权限管理模块中经常遇到树形结构的处理,这篇文章我们讲一下树形结构的节点过滤问题。在权限管理中的菜单管理模块,当我们新增菜单是需要选择它的父级菜单或者目录(有这样一个需求,就是菜单下面是可以新增按钮的,所以新增按钮就需要选择它的父级菜单,菜单的父级当然只是目录),那么这里选择上级菜单或者目录时就需要对树形结构进行过滤。

需求分析

处理el-tree的树形结构过滤问题我们首先会想到遍历递归去给要过滤的节点的值置空,这样它既然是空置那么就不会被el-tree树形渲染,经过踩坑这里的答案是不行的,它虽然为空,但还是会占位显示为空。

这里我使用的是el-tree控件的filter-node-method 方法进行过滤。

解决方案

第一步是既然要过滤的节点置空不行,那么我们就给他设置一个特殊的过滤值,我用的是'undefined',所以在递归遍历的时候就给要过滤的节点的值设置为'undefined',然后再对树形数据进行过滤:

         // 树形数据过滤
          this.$nextTick(() => {
            this.$refs.menutree.filter('undefined')
          })

第二步,当已经执行树形数据过滤之后,然后在树形组件上绑定:filter-node-method="filterNode"方法对树形结构的节点进行过滤:

      // 树形节点过滤
      filterNode(value, data, node) {
        // if (!value) return true;
        // 当节点的data.resourcesName里面有值时展示它,否则过滤它
        if (data.resourcesName.includes(value)) {
          return false
        } else {
          return true
        }
      },

el-tree树形踩坑

需求:el-tree节点需要传选中的父级菜单给后台,而不是仅仅子节点。

比如说下方需要将系统管理的节点id也传过给后台。

处理方法

实现:简单,通过getCheckedNodes()即可,但是需要定义后面的参数半选节点为true

遍历拿到id

 let chooseArr = this.$refs.meauTree.getCheckedNodes(false,true);
 let idList = []
 chooseArr.forEach(item=>{
    idList.push(item.id);
 })

普通需求应该getCheckedKeys即可满足。

 let chooseArr = this.$refs.meauTree.getCheckedKeys();

回显菜单

问题来了,回显菜单的时候,后台返回的是包含父节点的id,于是需要过滤处理。

方法:

遍历el-tree数据,看是否有子节点,没有子节点则存下id

 resolveAllEunuchNodeId(json, idArr, temp) {
      for (let i = 0; i < json.length; i++) {
        const item = json[i]
        // 存在子节点,递归遍历;不存在子节点,将json的id添加到临时数组中
        if (item.children && item.children.length !== 0) {
          this.resolveAllEunuchNodeId(item.children, idArr, temp)
        } else {
          temp.push(idArr.filter(id => id === item.id))
        }
      }
      return temp
    }
 

使用:

 // 解析出所有的太监节点
this.menuIdList = this.resolveAllEunuchNodeId(this.menuData, menuIds, [])

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯