本例为各种功能的具体实现
- (1)实现table里面的那个,点击左边的加号,展开子菜单。遍历拼接dataSource。这个是所有数据直接返回
- 这里面用了两个递归。具体思路就是:有一个存放所有数据的数组dataArr;数组里面的数据如果插入到了dataSource里面,就把这一条从dataArr里面删除,直到dataArr为空,就遍历完了
this.renderDataSource(dataArr); // dataArr为后台返回的数据
renderDataSource(dataArr: any) { // 用后台返回回来的数组来构建table的dataSource,数据里面的key,就是task_id
let dataSource = [], // dataSource就是已经构建了的节点数据
spliceDataIndex = []; // 在数据数组里面找到的数据的index
// 下面是渲染第一层的数据,先把p_task_id为0的数据渲染出来,然后再把后面的慢慢加上去
dataArr.forEach((value, index, arr) => {
let { task_id, p_task_id, task_name, task_type, task_sort, task_status } = value,
key = value.task_id;
if (p_task_id === 0) {
dataSource.push({ key, task_id, p_task_id, task_name, task_type, task_sort, task_status });
spliceDataIndex.push(index);
}
});
// 由于spliceDataIndex数组的index是从小到大的,所以如果从小到大删除dataArr中的项,那么就会乱;所以就转一个方向,从大到小来删
spliceDataIndex.reverse().forEach((value,index,arr) => {
dataArr.splice(value,1);
});
this.renderC