解决方案非常简单。如果您需要知道何时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
不影响布局。