ElementUI中tree控件踩坑记

vhr部门管理模块更新啦!为了让小伙伴们快速理解部门管理模块实现思路,我想通过3篇短文来给大家介绍下大致的实现思路和核心代码。

项目地址:https://github.com/lenve/vhr

1.SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(一)
2.SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(二)
3.SpringSecurity中密码加盐与SpringBoot中异常统一处理
4.axios请求封装和异常统一处理
5.权限管理模块中动态加载Vue组件
6.SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(六)
7.vhr部门管理数据库设计与编程
8.使用MyBatis轻松实现递归查询与存储过程调用

本文主要想说说ElementUI中Tree控件。坑不深。

一句话总结,就是很好很强大。但是ElementUI中树的加载可以通过load属性一个一个懒加载,在官方的案例中有这种用法,个人非常不推荐这种用法,很麻烦,节点的动态删除和修改都很麻烦,我一开始就使用了这个,后来发现动态添加节点、删除节点、节点过滤统统都很麻烦,然后换个思路,使用data,所有问题一下就都解决了。使用data思路如下:在tree中使用data属性加载数据,后期所有涉及到节点动态添加删除的事,我们统统只去操作data就可以了,这也符合数据驱动视图的思想。

1.在页面加载时,我在mounted方法中就去获取了所有的部门数据,然后直接加载到树上(这种方式比较省事,特别是处理后面动态添加删除时很方便,小伙伴在工作中可以根据实际情况选取合适的策略)。核心代码如下:

this.getRequest("/system/basic/dep/-1").then(resp=> {
    _this.treeLoading = false;
    if (resp && resp.status == 200) {
    _this.treeData = resp.data;
    }
})

2.添加节点时,当服务端添加成功后,会返回刚刚添加的节点的json,通过递归找到这一段json所在的位置,动态假如到树中。递归过程如下:

setDataToTree(treeData,pId,respData){
for(var i=0;i<treeData.length;i++) {
    var td = treeData[i];
    if(td.id==pId) {
    treeData[i].children=treeData[i].children.concat(respData);
    return;
    }else{
    this.setDataToTree(td.children, pId, respData);
    }
}
}

这是通过递归找到添加的位置,动态添加。

3.删除节点时,当服务端返回删除成功时,一样找到删除节点的位置,动态从树中删除。核心代码如下:

deleteLocalDep(treeData,data){
for(var i=0;i<treeData.length;i++) {
    var td = treeData[i];
    if(td.id==data.id) {
    treeData.splice(i, 1);
    return;
    }else{
    this.deleteLocalDep(td.children, data);
    }
}
}

这也是在删除成功后,通过递归找到删除的位置,动态删除数据。

4.由于我采用了一次性加载所有部门的策略,所以节点过滤这块特别容易,基本上完全参考官方案例就能实现。

其他一些琐碎的技术就不值得介绍了,大家在源码中自行研究,有问题欢迎留言讨论。

关注公众号,可以及时接收到最新文章:

图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue.js 是一个渐进式的 JavaScript 框架,它能够帮助开发者构建用户界面。而 ElementUI 是一个基于 Vue.js 的前端 UI 框架,它提供了很多实用的 UI 组件,其包括树形控件。使用 Vue.js 和 ElementUI 开发树形结构的应用时,可以使用 ElementUI 提供的 el-tree 组件来实现。 ### 回答2: vue elementui是一个优秀的基于Vue.js框架的UI组件库,其包含了很多实用的控件,其包括tree树形控件tree树形控件用于展示具有层级关系的数据结构,其每个节点可以有任意子节点。在Vue.js框架,通过使用elementuitree控件,可以极大地简化tree树形控件的开发。 想要在vue elementui使用tree树形控件,首先需要引入elementuitree组件,然后在Vue组件声明tree控件,如下所示: ```html <template> <el-tree :data="treeData"></el-tree> </template> <script> import { ElTree } from 'element-ui'; export default { components: { ElTree, }, data() { return { treeData: [ { label: '节点1', children: [ { label: '子节点1.1', children: [ { label: '子节点1.1.1', }, ], }, { label: '子节点1.2', }, ], }, { label: '节点2', children: [ { label: '子节点2.1', }, { label: '子节点2.2', }, ], }, ], }; }, }; </script> ``` 在上述代码,使用了elementui的el-tree组件,并在组件声明了一个名为treeData的数据,该数据用于存储要展示的树形结构数据。在treeData数据,每个节点都是一个对象,其包含label属性,用于展示节点文本,以及children属性,用于存储子节点数据。通过将treeData数据绑定到el-tree组件的data属性上,即可展示出完整的tree树形控件。 在实际开发,还可以通过el-tree组件的props属性,对tree树形控件进行更多的自定义配置,例如设置单选或多选、显示图标等。另外,el-tree组件还提供了很多实用的事件,例如node-click、check-change等,可以方便地对用户操作进行响应。 综上所述,vue elementuitree树形控件既简单实用又功能强大,相信在实际开发会得到广泛应用。 ### 回答3: Vue ElementUI Tree 树形控件是一款基于 Vue.js 框架和 ElementUI 组件库实现的树形控件。该控件采用了细粒度渲染的方式,可以在大数据量下高效渲染,并支持异步加载节点数据。 使用 Vue ElementUI Tree 树形控件,需要先导入相关的依赖包,如 ElementUI 组件库和 Vue.js 框架。在页面创建 tree 组件,通过 props 属性设置相应的数据源和配置项,可以实现树形结构的展示和交互。 Vue ElementUI Tree 树形控件的主要特点包括以下几个方面: 1、支持异步加载节点数据 Vue ElementUI Tree 树形控件支持异步加载节点数据,可以实现懒加载和动态更新节点。通过配置异步加载函数和加载效果,可以实现异步加载节点数据的高度自定义。 2、支持多选和单选 用户可以配置 Vue ElementUI Tree 树形控件的选择模式,实现单选和多选功能。选择模式包括 radio(单选框)和 checkbox(复选框)两种。 3、支持节点拖拽和排序 Vue ElementUI Tree 树形控件支持节点拖拽和排序,可以通过配置相应的拖拽类型实现节点的复制、移动和排序等操作。 4、支持节点搜索和过滤 Vue ElementUI Tree 树形控件支持节点搜索和过滤功能,可以快速定位目标节点并进行相应的操作。 5、配置灵活性高 Vue ElementUI Tree 树形控件支持多种配置项,可以实现树形结构的高度自定义,包括数据源格式、节点图标、节点展开方式等。 总之,Vue ElementUI Tree 树形控件是一款功能强大、配置灵活的树形控件,在企业级应用和数据展示具有广泛的应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值