Я использую Angular Material TreeView, но если dataSource имеет более 350 элементов , тогда я получу ERROR RangeError: Превышен максимальный размер стека вызовов. Бессонная ночь: D
вот мой код: (в основном взят из примеров AngularMaterial)
<mat-tree [dataSource]="data" [treeControl]="treeControl" #tree>
<mat-tree-node *matTreeNodeDef="let node" matTreeNodeToggle>
{{node[textField]}}
</mat-tree-node>
<mat-nested-tree-node *matTreeNodeDef="let node; when: hasChildren">
<li>
<app-icon matTreeNodeToggle [name]="treeControl.isExpanded(node) ? 'chevron_down' : 'chevron_right'"></app-icon>
{{node[textField]}}
<ul [class.hidden]="!treeControl.isExpanded(node)">
<ng-container matTreeNodeOutlet></ng-container>
</ul>
</li>
</mat-nested-tree-node>
</mat-tree>
export class TreeViewComponent implements OnInit {
@Input() data: any[];
@Input() textField: string;
@Input() childrenField: string;
treeControl: NestedTreeControl<any>;
treeDataSource: MatTreeNestedDataSource<any>;
constructor() {
this.treeControl = new NestedTreeControl<any>(this.makeGetChildrenFunction());
this.treeDataSource = new MatTreeNestedDataSource();
}
hasChildren = (_: number, node: any) => {
return node[this.childrenField] && node[this.childrenField].length > 0;
}
private makeGetChildrenFunction() {
return node => of(node[this.childrenField]);
}
ngOnInit(): void {
this.treeDataSource.data = this.data;
}
}
структура данных
export class TreeViewPreviewComponent {
treeViewData: any[];
constructor() {
this.treeViewData = [ { text: 'Root', items: this.createRandomData(1000) } ];
}
private createRandomData(count: number): Array<any> {
const result = Array(count).fill({}).map((_, index) => ({
text: 'Item' + index,
items: [ { text: 'SubItem' + index, items: null } ]
})
);
return result;
}
}