记录开发中element树形控件数据应用在页面上的相关问题
业务场景
根据后台返回数据生成角色权限的树形结构。获取节点数据后,当父节点被勾选时,所有的子节点全部被勾选,而实际上后台并没有返回当前父节点的所有子节点的ID,所以应该只有部分子节点被勾选。
下面第一张图是一开始填充数据后的效果,而第二张图是真正想要的效果,


解决方案
这里试过在 el-tree 上增加 :check-strictly="true" 确实也出现了右图的效果,但缺点是此时想全选,点击父节点的复选框,对应子节点复选框不会被勾上,所以此方案排除。
也试过用官方提供的 setChecked(data , false) 也未生效,这里不知道为啥没生效,参数和前提条件都有按照文档写好。
最后想的解决办法是:对数据进行过滤,选择没有子菜单的菜单ID传给树形控件,那么相应的子菜单的父节点也会半勾选上,就实现了上面右图的效果
以下是后台返回某个角色拥有的菜单ID列表 和 所有的菜单列表,都是一维数组:


首先将菜单扁平化数据转化为树状结构,这里核心是如果一个节点有父节点menuParentId,则为他的父节点创造一个children数组包含他,依次遍历;否则为祖先节点。
buildTree2(list){
let temp = {};
let tree = [];
for(let i in list){
temp[list[i].menuitemId] = list[i];
}
for(let i in temp){
if(temp[i].menuParentId) {
if(!temp[temp[i].menuParentId].children) {
temp[temp[i].menuParentId].children = []
}
temp[temp[i].menuParentId].children.push(temp[i]);
} else {
tree.push(temp[i]);
}
}
return tree;
}
this.data2 = util.buildTree2(data.data.menuList)
其次从树状结构数据中筛选出没有子菜单的ID数组:
findNochild(arr){
arr.forEach(element => {
if(!element.children){
this.menuitemIdList.push(element.menuitemId)
}else{
this.findNochild(element.children)
}
});
},
this.findNochild(this.data2)//筛选出没子菜单的数组
let tempList2 = []
let tempList3 = []
tempList.forEach(element => {
tempList2.push(element.menuitemId) //后台返回的ID数组
});
tempList2.forEach(element => { //取相同的元素;
if(this.menuitemIdList.indexOf(element)>-1){
tempList3.push(element)
}
});
this.$refs.tree.setCheckedKeys(tempList3);
记录开发中element树形控件数据应用在页面上的相关问题的更多相关文章
- EBS OAF 开发中的OAMessageRadioGroup控件
EBS OAF 开发中的OAMessageRadioGroup控件 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 简单介绍 RadioGro ...
- SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题
转:http://blog.csdn.net/miragesky2049/article/details/7204882 SharePoint2010沙盒解决方案基础开发--关于TreeView树形控 ...
- Android开发中目前流行控件和知识点总结
Android开发中目前流行控件和知识点总结 1.SlidingMenu 滑动菜单 应用案例:Facebook . Path 2.0 .人人.网易新闻 下载地址: https://github.c ...
- ios开发中关闭textview控件的虚拟键盘
在ios开发中,textfield控件在点击的时候出现虚拟键盘,关掉虚拟键盘可以通过虚拟键盘中的done button和点击view中的任意地方来关闭虚拟键盘. 1.第一种方法是textfield控件 ...
- WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色
本文转载:http://www.cnblogs.com/umplatform/archive/2012/08/29/2660240.html 在B/S开发中,对TreeView控件要改变当前选中节点的 ...
- 基于vue开发的element-ui树形控件报错问题解决
对没错,这次又是ElementUI的问题,在使用ElementUI中的 tree 树形控件时需要动态添加DOM元素,但是在使用文档中给出的案例的时候会报错. 案例:ElementUI树形控件 - 自定 ...
- VC中的树形控件
树形控件可以显示出各项之间的层次关系,因此在VC中很常用. 1.树形控件的常用风格 TVS_HASBUTTONS 在父项目前显示+.-.用户可以通过点击该符号来打开或收起子项 TVS_HASLINES ...
- C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变(转)
在设计可供用户调整大小的窗体时,如何实现该窗体上的控件也应能正确地随窗体的改变而自动调整大小并且能重新定位?此时就要借助控件的.Anchor属性.Anchor属性定义控件的定位点位置.当控件锚定到某个 ...
- C#开发笔记,点点细微,处处真情,记录开发中的难言之隐
该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/956 访问. 概述 本系列文章将会向大家介绍本人实际开发过程中所遇到技术 ...
- iOS开发:记录开发中遇到的编译或运行异常以及解决方案
1.部署到真机异常 dyld`dyld_fatal_error: -> 0x120015088 <+0>: brk #0x3 dyld: Library not loaded ...
随机推荐
- Clion 中 Rust 插件开启 WSL 调试
Rust Linux 配置 wsl 中执行命令: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 按照可能会卡住,需要在本 ...
- Google C++编程规范(Google C++ Style Guide)
参考链接: Google 代码规范 C++总结 Google 开源项目风格指南--中文版 Google C++ Style Guide是一份不错的C++编码指南,我制作了一张比较全面的说明图,可以在短 ...
- JSP标准标签库(JSTL)个人使用指南
前排提示,本篇仅涉及 JSTL 的配置和简要介绍 JSTL 的 Core 和 Functions 标签库中几个常用的标签.更加详细的内容,博主会贴相应超链接. 注意:本教程使用的 JSTL 1.2,如 ...
- JSP | IDEA中部署tomcat,运行JSP文件,编译后的JSP文件存放地点总结
首先保证你正常部署了Tomcat,并且正常在浏览器中运行了JSP文件. 参考博客:Here 那么Tomcat编译后的JSP文件(_jsp.class 和 _jsp.java)的存放地点: (一)一般存 ...
- 消息服务 + Serverless 函数计算如何助力企业降本提效?
作者 | 柳下 背景介绍 消息队列服务(下文均以 Message Service 命名)作为云计算 PaaS 领域的基础设施之一,其高并发.削峰填谷的特性愈发受到开发者关注.Message Servi ...
- 05_二叉树的层次遍历II
二叉树的层序遍历 II 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 . (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例 1: 输入:root = [3,9,20 ...
- go 接口学习笔记
这里是对接口在汇编层面上转换和实现的小结,详细了解可参考 Go 语言接口的原理 1. 类型转换:结构体到接口 1.1 结构体方法实现接口 package main type Duck interfac ...
- 线性代数 · 矩阵 · Matlab | Moore-Penrose 伪逆矩阵代码实现
背景 - Moore-Penrose 伪逆矩阵: 对任意矩阵 \(A\in\mathbb C^{m\times n}\) ,其 Moore-Penrose 逆矩阵 \(A^+\in\mathbb C^ ...
- JMS 服务器健康检查
JMS所有服务器程序,包括Gateway.GatewayReferee.Proxy.TokenServer.以及编写的微服务器,都支持使用第三方工具进行健康检查. 使用telnet 进行健康检查 向任 ...
- [转帖]【linux命令学习】— sar 命令学习
https://blog.csdn.net/u013332124/article/details/101075521 一.命令使用介绍 sar命令全称 System Activity Report,它 ...