Angular 8:使用* ngIf时,在控制台ExpressionExpressdAfterItHasBeenCheckedError上出现错误

时间:2019-09-21 05:30:24

标签: angular angular8

包装纸中有2个组件,包装纸的高度固定。 ToggleComponent具有绑定到height字段的height css属性和一个用于更改height字段的按钮。 TestComponent承担其余高度。它具有绑定到其clientHeight的测试属性。 重点是将DOM绑定到通过其绑定而可能会从其他组件更改的某些内容,这就是我使用clientHeight的原因。如果在TestComponent上有* ngIf指令,则在更改ToggleComponent.height时,会发生ExpressionChangedAfterItHasBeenCheckedError。

错误:

Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'test: 200'. Current value: 'test: 100'.
    at viewDebugError (core.js:20440)
    at expressionChangedAfterItHasBeenCheckedError (core.js:20428)
    at checkBindingNoChanges (core.js:20530)
    at checkNoChangesNodeInline (core.js:23403)
    at checkNoChangesNode (core.js:23390)
    at debugCheckNoChangesNode (core.js:23994)
    at debugCheckDirectivesFn (core.js:23922)
    at Object.eval [as updateDirectives] (testChild.html:2)
    at Object.debugUpdateDirectives [as updateDirectives] (core.js:23911)
    at checkNoChangesView (core.js:23289)

1 个答案:

答案 0 :(得分:0)

尝试添加这样的代码:

import { ChangeDetectorRef } from '@angular/core';

您的课程必须实现OnAfterViewChecked

constructor(private cdRef:ChangeDetectorRef) {}

ngAfterViewChecked()
{
    this.cdRef.detectChanges();
}

但是要获得最佳答案,请显示您的代码。