我有一个非常非常裸露的最小树,有时需要渲染成千上万的元素。这会导致一些非常糟糕的性能,因此该网站变得相当滞后。相反,我选择尝试cdk-virtual-scroll-viewport
,但我无法让它工作,因为我正在使用ngTemplateOutlet
. 例子:
<ul>
<ng-template #recursiveList let-root>
<li *ngFor="let item of root; trackBy:item?.id">
<!-- Show the actual elements, including + and - to expand/contract the tree -->
<ul [ngClass]="item?.expanded ? '' : 'hide'" *ngIf="item?.children && item?.children.length > 0">
<ng-container *ngTemplateOutlet="recursiveList; context:{ $implicit: item?.children }"></ng-container>
</ul>
</li>
</ng-template>
<ng-container *ngTemplateOutlet="recursiveList; context:{ $implicit: root }"></ng-container>
</ul>
我的root
数组看起来有点像这样:
[{
id: "aec04ef4-fc6a-481f-a12d-0ce987d494b3",
expanded: true,
children: [{
id: "cbf9e862-e932-410f-ad84-ed0a5ec1917a",
expanded: false,
children: []
}]
}]
我试着简单地这样做:
<ul>
<ng-template #recursiveList let-root>
<li *cdkVirtualFor="let item of root; trackBy:item?.id">
<!-- Show the actual elements, including + and - to expand/contract the tree -->
<ul [ngClass]="item?.expanded ? '' : 'hide'" *ngIf="item?.children && item?.children.length > 0">
<ng-container *ngTemplateOutlet="recursiveList; context:{ $implicit: item?.children }"></ng-container>
</ul>
</li>
</ng-template>
<cdk-virtual-scroll-viewport style="height: 750px" itemSize="50">
<ng-container *ngTemplateOutlet="recursiveList; context:{ $implicit: root }"></ng-container>
</cdk-virtual-scroll-viewport>
</ul>
所以基本上添加了cdk-virtual-scroll-viewport
元素并使用cdkVirtualFor
而不是ngFor
,但我收到一条错误消息:
没有 CdkVirtualScrollViewport 的提供者
我猜这是一个错误,因为它尚未关闭:https ://github.com/angular/components/issues/15277
知道如何调整我现有的代码吗?我面临的最大问题是隐藏/取消隐藏部分,因为由于ng-container
某种原因它无法使用它。