解决方案非常简单。如果您需要知道何时ngFor完成将所有 DOM 元素打印到浏览器窗口,请执行以下操作:
1. 添加占位符
为正在打印的内容添加占位符:
<div *ngIf="!contentPrinted">Rendering content...</div>
2. 添加容器
display: none为内容创建一个容器。打印完所有项目后,请执行display: block。contentPrinted是一个组件标志属性,默认为false:
<ul [class.visible]="contentPrinted">
...items
</ul>
3.创建回调方法
添加onContentPrinted()到组件中,ngFor完成后自动禁用:
onContentPrinted() {
this.contentPrinted = true;
this.changeDetector.detectChanges();
}
并且不要忘记使用ChangeDetectorRef来避免ExpressionChangedAfterItHasBeenCheckedError。
4. 使用 ngForlast值
last在 上声明变量ngFor。li当此项是最后一项时,在内部使用它来运行一个方法:
<li *ngFor="let item of items; let last = last">
...
<ng-container *ngIf="last && !contentPrinted">
{{ onContentPrinted() }}
</ng-container>
<li>
- 使用
contentPrinted组件标志属性onContentPrinted() 只运行一次。
- 用于
ng-container不影响布局。