angular - 使用对象数组中的 Angular 材质树时超出最大调用堆栈大小
问题描述
我正在尝试使用 Angular 材料来可视化一棵树。树是从以下对象结构构建的Tree
:
export interface Tree {
Name: string;
KeyName: string;
Typ: number;
Children?: Tree[];
}
正如mat-tree
所期望的对象数组作为参数的输入dataSource
,我创建了一个 Tree 数组,其中只有一个元素包含整个树结构/数据。树被正确解析/查看,直到我在控制台中收到以下消息。
Firefox 说如下:
message: "1 errors occurred during unsubscription:\n1) InternalError: too much recursion"
name: "UnsubscriptionError"
Chrome 说如下:
Error occurred: Maximum call stack size exceeded
我的树组件:
const GetChildren = (node: Tree) => of(node.Children);
const TC = new NestedTreeControl(GetChildren);
@Component({
selector: 'app-tree',
templateUrl: './tree.component.html',
styleUrls: ['./tree.component.scss'],
})
export class TreeComponent implements OnInit {
tc = TC;
tree: Tree[];
constructor(private apiService: ApiService) {}
ngOnInit(): void {
this.apiService.getTree().subscribe(
tree => this.tree = tree
);
}
hasChild(_: number, node: Tree) {
return node.Children != null && node.Children.length > 0;
}
}
我的模板看起来像:
<mat-tree [dataSource]="tree" [treeControl]="tc">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodeToggle>
<li>
<div>
<button mat-icon-button disabled>
<mat-icon>
remove
</mat-icon>
</button>
{{node.Name}} - {{node.KeyName}}
</div>
</li>
</mat-tree-node>
<mat-nested-tree-node *matTreeNodeDef="let node; when: hasChild">
<li>
<div class="mat-tree-node">
<button mat-icon-button matTreeNodeToggle>
<mat-icon>
{{tc.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
</mat-icon>
</button> {{node.Name}}
</div>
<ul [hidden]="!tc.isExpanded(node)">
<ng-container matTreeNodeOutlet></ng-container>
</ul>
</li>
</mat-nested-tree-node>
如前所述,树被正确地可视化,直到发生错误的某个点。树中所有节点和叶子的数量约为 1625。
我怎样才能继续使用 Angular 材质树来解决这个问题?
解决方案
推荐阅读
- sql - SQL从表中显示当前月份和下个月的数据
- firebase - App Inventor:从 Firebase 数据库中检索数据的问题
- sql-server - SSIS - 获取不匹配的行并加载到维度表中
- machine-learning - 核函数是否需要有对应的特征图?
- xamarin - iOS13下CBCentralManager的retrievePeripherals(withIdentifiers:)不产生CBPeripherals?
- amazon-web-services - AWS 删除 repo S3 中的旧文件
- python-3.x - 需要帮助使用 bs4/python 从没有 div 的网页上抓取松散的文本
- redis - 3.7.0 之后具有事件总线使用者的 PubSub vertx redis
- highcharts - 如何对 Highstock 标志系列进行下采样
- javascript - ajax 调用后的正文 onload 事件