【发布时间】:2021-08-16 09:30:06
【问题描述】:
Angular 6 组件通过 Input() allItems 参数接收一个大列表:
ngOnInit() {
this.isLoading = true;
}
ngOnChanges(changes) {
if (changes.allItems && changes.allItems.currentValue.length) {
this.isLoading = false;
}
}
我想在加载此列表时显示微调器。
<mat-spinner *ngIf="isLoading"></mat-spinner>
但是,在某些情况下,微调器会永远旋转,阻止它的唯一方法是使用 setTimeout。有没有更优雅的方法呢?请指教。
ngOnChanges(changes) {
if (changes.allItems && changes.allItems.currentValue.length) {
setTimeout(() => this.isLoading = false, 0);
}
}
我尝试了不同的方法:调用 ChangeDetectorRef 的 detectChanges、应用 onPush 策略等。
不幸的是,到目前为止唯一有效的是 setTimeout :(
【问题讨论】:
-
你必须提供一个完整的例子。我唯一能猜到的是,当您将项目添加到
allItems时,不会触发ngOnChanges。但是在这种情况下超时不应该有帮助......