javascript - ExpressionChangedAfterItHasBeenCheckedError 解决方法

标签 javascript angular typescript

我正在实现以下*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) {...}

Thiscommon @Angular 4.2.x 的问题。无论这是否是最佳实践,该解决方法都比添加一项生命周期检查要繁重得多。如果我没记错的话,您不必为 4.3.x 执行此操作。

关于javascript - ExpressionChangedAfterItHasBeenCheckedError 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45597723/

相关文章:

javascript - Angular 4 动画正在 init 组件上执行

javascript - 组合/合并可观察对象

reactjs - React 测试库 : Test styles (specifically background image)

angular - 如何对作为 Observable 保存的列表进行排序(RxJS,Angular 2)

angular - AOT 构建文件大小大于正常构建

javascript - 这个小鸟动画是怎么画的?

javascript - RegExp 以类似 ES6 的格式剥离变量

angular - 以 Angular 显示单个元素下的详细信息

javascript - JSON 数组数据返回 Undefined

javascript - 如何格式化 HTML &lt;textarea&gt; 中的文本?