我想获取节点列表来创建所述节点对象的数组,以便显示层次结构。基础数据/结构如下所示:
ROOT (ID=1)
|--NODE (ID=2)
| └--NODE (ID=4)
| └--NODE (ID=11)
└--NODE (ID=3)
|--NODE (ID=5)
|--NODE (ID=6)
|--NODE (ID=7)
└--NODE (ID=8)
|--NODE (ID=9)
└--NODE (ID=10)
您有一个根节点,其子节点也包含子节点。包括ROOT节点在内,树中有3个阶段。我创建了一个 REST-API,它返回给定节点内的子节点。我还尝试在 REST 结构中对该层次结构进行建模,因此调用如下所示:
TYPE PATH RESULT CHILD IDs
GET /1/nodes 2, 3
GET /1/nodes/2/nodes 4
GET /1/nodes/3/nodes 5, 6, 7, 8
GET /1/nodes/3/nodes/8/nodes 9, 10
为了构建一棵树,我尝试使用递归模式,如下所示:
this.subject.next(this.getNodes('/1/nodes'); /*root-uri*/
getNodes(uri) {
const nodeList: Node[] = [];
http.get(path).subscribe(data => {
for(const obj of data.json()) {
let node = new Node();
//map data to Node e.g node.is = data.id
//get the children with the nested call
node.children = getNodes(uri + '/' + node.id + '/nodes');
nodeList.push(node);
}
}
return nodeList;
}
所以我的问题是:
如何通过递归 http 调用创建节点对象数组并向订阅者发送消息,以便订阅者仅接收结构正确的完整节点数组
EDIT
这就是节点模型的样子
export class Node {
uuid: string;
label: string;
parentID: string;
version: number;
addableFlag: boolean;
sectionFlag: boolean;
children: Node[];
}