Angular执行不必要的异步验证,并抛出ExpressionChangedAfterItHasBeenCheckedE



我正在angular 6.1中构建自己的表单创建者。我制作了复制代码-在这里:https://stackblitz.com/edit/angular-svpkpx?file=src%2Fapp%2Fapp.component.html

如示例所示。当您添加一些动态创建的字段时,angular会对完整的字段执行异步验证。当这些字段处于ngFor循环中时,它也抛出ExpressionChangedAfterItHasBeenCheckedError

当没有ngFor环路时,存在非ExpressionChangedAfterItHasBeenCheckedError

如果您简单地将flag toggle方法移动到组件代码中,而不是在模板和强制更改检测运行中执行,它将按预期开始工作。

视图:

<button type="button" (click)="toggleShow()">show/hide</button>

组件:

constructor(private cdr:ChangeDetectorRef){
}
toggleShow(){
this.show=!this.show;
this.cdr.detectChanges();
}

https://stackblitz.com/edit/angular-jnmqud?file=src/app/app.component.ts

angular团队的@kara发现了真正的问题:https://github.com/angular/angular/issues/25350#issuecomment-411226248

我使用formGroup作为@Input,因为它是一个处理问题的角度指令。

最新更新