Задумывались ли вы, если мир просто хочет вас достать?
Ну, иногда это правда. Вы столкнулись с одним из самых отвратительных поведений, которые бросают с помощью углов.
Обычно, как и в 95% случаев, ExpressionChangedAfterItHasBeenCheckedError
в основном угловатый, говорит вам, что вы не понимаете основ обнаружения жизненного цикла: ngOnChanges против ngOnInit против ngAfterViewInit . Но иногда это происходит из-за иерархии вложений и шаблонов, и проверки порядка выполняются в вашем шаблоне.
Примите следующее, которое выдает ошибку:
<form [name]="formName"
[formGroup]="formGroup">
<div *ngIf="true">
<input formControlName="name"
required
placeholder="Please enter you name">
</div>
</form>
<div *ngIf="formGroup.valid">
Name is required.
</div>
Причина, по которой выдается ошибказаключается в том, что обнаружение изменений сначала оценивает * ngIf div ошибки, прежде чем оно оценивает достоверность ввода, поскольку входное значение на один уровень ниже с точки зрения иерархии шаблонов.
Обходной путь заключается в приведении div ошибки к тому жеуровень как вход, добавив еще один <div *ngIf="true"></div>
вокруг него (как упомянуто выше).
Не все герои носят накидки, некоторые оставляют комментарии Github