我的反應形式是三個組件級別深。父組件創建一個沒有任何字段的新表單,並將其傳遞給子組件。動態嵌套反應形式:ExpressionChangedAfterItHasBeenCheckedError
首先,外形是有效的。稍後,子組件添加帶有驗證器的新表單元素(失敗),從而使外部表單無效。
我收到的控制檯ExpressionChangedAfterItHasBeenCheckedError錯誤。我想修復這個錯誤。
不知何故,這隻發生在我添加第三層嵌套。同樣的方法似乎適用於兩層嵌套。
Plunker:https://plnkr.co/edit/GymI5CqSACFEvhhz55l1?p=preview
父組件
@Component({
selector: 'app-root',
template: `
myForm.valid: <b>{{myForm.valid}}</b>
<form>
<app-subform [myForm]="myForm"></app-subform>
</form>
`
})
export class AppComponent implements OnInit {
...
ngOnInit() {
this.myForm = this.formBuilder.group({});
}
}
子組件
@Component({
selector: 'app-subform',
template: `
<app-address-form *ngFor="let addressData of addressesData;"
[addressesForm]="addressesForm">
</app-address-form>
`
})
export class SubformComponent implements OnInit {
...
addressesData = [...];
constructor() { }
ngOnInit() {
this.addressesForm = new FormArray([]);
this.myForm.addControl('addresses', this.addressesForm);
}
子組件
@Component({
selector: 'app-address-form',
template: `
<input [formControl]="addressForm.controls.addressLine1">
<input [formControl]="addressForm.controls.city">
`
})
export class AddressFormComponent implements OnInit {
...
ngOnInit() {
this.addressForm = this.formBuilder.group({
addressLine1: [
this.addressData.addressLine1,
[ Validators.required ]
],
city: [
this.addressData.city
]
});
this.addressesForm.push(this.addressForm);
}
}
檢查[你需要了解的'ExpressionChangedAfterItHasBeenCheckedError'錯誤的一切(https://blog.angularindepth.com/everything-you-need-to-know-about-the-expressionchangedafterithasb eencheckederror-error-e3fd9ce7dbb4)文章 –
我在過去24小時內訪問了該頁面5次;)。仍然不知道如何解決它。 –
你參考 –