首先看一下数据:长这个样子
然后后端做一下处理:
@Override
public List getDicData(Integer parentId) { //从哪一层开始遍历做展示,这里选取根节点,即是:0
LambdaQueryWrapper<BusOpenType> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BusOpenType::getParentId, parentId);
// 查找出含有此根节点的数据作为第一层
List<BusOpenType> list = busOpenTypeMapper.selectList(wrapper);
//遍历
for (BusOpenType type : list) {
//如果获取到的父节点 !=null,即进递归
if (type.getParentId() != null) {
List<BusOpenType> openTypes = getDicData(type.getId());
//取出的数据作为children
type.setChildren(openTypes);
}
}
//返回
return list;
}
返回的数据长这样:
此时已经是前端可以接收的数据了,但是如果不加处理,结果长成这样:
当选取到最后一层时,后面还会有个空[],导致我们无法选取,这显然不太合理。
所以我们在前端写个方法稍稍处理一下:
// 去除空children
function deleteChildren(arr) {
let childs = arr
for (let i = childs.length; i--; i > 0) {
if (childs[i].children) {
if (childs[i].children.length) {
deleteChildren(childs[i].children)
} else {
delete childs[i].children
}
}
}
return arr
}
再引进我们调用的接口中,此时空children就被删除了,看下返回的数据
回到页面,此时结果已经满足需求。