最近页面加载树结构特别卡顿。最后用异步加载节点的方式提升了页面树结构的速度。
当第一次加载我们规定,第一个几点只展示到第三层,且每一层的第一个节点默认展开。其他只显示是否有子节点
因此后端写了次接口可以动态控制想要的初始展开层级。
其效果如果
/**
* 判断是否有子节点,并将子节点加入
* @param data
* @param nodeNum 当前节点位置
* @param dept 想要节点深度
* @return
*/
private List<TreeDTO> hasChildren(List<TreeDTO> data, int nodeNum, int dept) {
int nowNum = 1;
while (nodeNum < dept) {//控制只要三层节点
while (nowNum == nodeNum) {//控制当前进入的数据应该从第几层开始找
List<TreeDTO> chidren = findCurrentNodeIdByDepth(data, nowNum , 0); //找出该层数据
for(TreeDTO log : chidren) {
boolean findOne = false; //用于判别是否找到第一个含有子节点的值
List<TreeDTO> childrenList = dao.selectByParent(log.getId()); //这里是从数据库找该节点的子节点。还可以优化
if(childrenList != null && childrenList.size() > 0) {//表明该节点已经被找过一次 调到下个节点寻找
log.setHasChildren(true);
if(!findOne && nodeNum < dept -1) {
log.setChildren(chage2DTO(childrenList));
findOne = true;
}
}
}
//如果 本层都没有子节点 也需要将nowNum+1 停止循环
nowNum++;
}
nodeNum++;
hasChildren(data, nodeNum, dept);
}
return data;
}
/**
*
* @param data
* @param wantNode 所需要的节点
* @param nownode 当前节点
* @return
*/
private List<TreeDTO> findCurrentNodeIdByDepth(List<TreeDTO> data, int wantNode, int nownode) {
List<TreeDTO> chidren = data;
while (nownode < wantNode) {
nownode++;
for(TreeDTO log : data) {
if(log.isHasChildren()) {
chidren = log.getChildren();
return findCurrentNodeIdByDepth(chidren, wantNode, nownode);
}
}
}
return chidren;
}