【发布时间】:2018-10-05 13:31:03
【问题描述】:
我试图以 Angular 创建动态内容树。如下所示。
vehicles
- cars
- vw
- golf
- passat
- ford
- fiesta
- toyota
- Buses
- volvo
- Scania
Animals
- carnivorous
- Lion
- tiger
- Herbivorous
- Cow
- Horse
我有一个内容树组件和一个树节点组件。我试图根据章节的数量动态地在树中创建孩子。由于 DocRootNode 是一个 observable,我必须在代码中使用异步管道。我递归地使用树节点来创建动态树。
内容树.html:
<tree-node *ngFor="let docChildNode of DocRootNode$ | async"
[node]="docChildNode">
</tree-node>
树节点.html:
<div class="children" *ngIf="node.children">
<tree-node *ngFor="let childDocNode of node.children" [node]="childDocNode" >
</tree-node>
</div>
一切都按预期工作。但是我发现了一个问题,即在后台递归正在循环中。例如:我添加了 [ngClass] = "{ isActive: isActive(node) }" 并在 isActive 函数中,我做了一个控制台日志,我发现日志正在循环中。我找不到原因。我是 Angular 的新手。非常感谢任何帮助。
更新日志。数字是节点
tree-node.component.ts:78 This one 4
tree-node.component.ts:78 This one 6
tree-node.component.ts:78 This one 3
tree-node.component.ts:78 This one 3-0
tree-node.component.ts:78 This one 3-0-0
tree-node.component.ts:78 This one 3-0-0-0
tree-node.component.ts:78 This one 3-0-0-2
tree-node.component.ts:78 This one 3-0-1
tree-node.component.ts:78 This one 3-0-2
tree-node.component.ts:78 This one 3-0-2-0
tree-node.component.ts:78 This one 3-0-2-1
tree-node.component.ts:78 This one 3-0-2-2
tree-node.component.ts:78 This one 3-1-0-0
tree-node.component.ts:78 This one 3-1-1
tree-node.component.ts:78 This one 3-1-1-0
tree-node.component.ts:78 This one 4
tree-node.component.ts:78 This one 6
tree-node.component.ts:78 This one 3
tree-node.component.ts:78 This one 3-0
tree-node.component.ts:78 This one 3-0-0
tree-node.component.ts:78 This one 3-0-0-0
tree-node.component.ts:78 This one 3-0-0-2
tree-node.component.ts:78 This one 3-0-1
tree-node.component.ts:78 This one 3-0-2
tree-node.component.ts:78 This one 3-0-2-0
tree-node.component.ts:78 This one 3-0-2-1
tree-node.component.ts:78 This one 3-0-2-2
tree-node.component.ts:78 This one 3-1-0-0
tree-node.component.ts:78 This one 3-1-1
tree-node.component.ts:78 This one 3-1-1-0
tree-node.component.ts:78 This one 4
tree-node.component.ts:78 This one 6
tree-node.component.ts:78 This one 3
tree-node.component.ts:78 This one 3-0
tree-node.component.ts:78 This one 3-0-0
tree-node.component.ts:78 This one 3-0-0-0
tree-node.component.ts:78 This one 3-0-0-1
tree-node.component.ts:78 This one 3-0-0-2
tree-node.component.ts:78 This one 3-0-1
tree-node.component.ts:78 This one 3-0-2
tree-node.component.ts:78 This one 3-0-2-0
tree-node.component.ts:78 This one 3-0-2-1
tree-node.component.ts:78 This one 3-0-2-2
tree-node.component.ts:78 This one 3-1-1
tree-node.component.ts:78 This one 3-1-1-0
补充
【问题讨论】:
-
“进入循环”是什么意思?请分享控制台日志输出并解释其中的问题。
-
日志重复,页面挂起
-
如果可能,请考虑创建StackBlitz
-
更新了日志。
-
可能是 Angular 无法正确检测对象更改的问题。您是否尝试将
trackBy表达式添加到您的ngFors 中?
标签: angular recursion tree observable ngfor