我正在实现以下*ngIf。我知道从技术上讲我不应该从 *ngIf 中调用函数,但黑客需要它:
<div *ngIf="!ddlAuthorsSelect2Bound && wireUpSelect2()"></div>
无论如何,以下实现工作正常:
<div *ngIf="wireUpSelect2()"></div>
但是,由于某种原因,这个 *ngIf 被多次调用。所以我在第一个代码示例中添加了额外的成员变量检查,以防止额外的函数调用。这也按预期工作,但 ng2 将以下错误写入控制台:
Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'true'. Current value: 'false'.
你知道我可以抑制这个错误的方法吗?
最佳答案
快速而肮脏的解决方法是将其放入您的组件中: public ngDoCheck(): void { this.cdRef.detectChanges(); }
.
确保导入:import {..., ChangeDetectorRef} from '@angular/core';
并将其包含在构造函数中:constructor(..., private cdRef:ChangeDetectorRef) {...}
This是 common @Angular 4.2.x 的问题。无论这是否是最佳实践,该解决方法都比添加一项生命周期检查要繁重得多。如果我没记错的话,您不必为 4.3.x 执行此操作。
关于javascript - ExpressionChangedAfterItHasBeenCheckedError 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45597723/