我正在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
我使用formGroup
作为@Input
,因为它是一个处理问题的角度指令。