Мой код был запущен в реактивной форме ранее, я не опубликовал весь фрагмент кода.
ReactiveForms и templateForms (ngModel)
плохо сочетаются друг с другом.
My переменная связывания формы и переменная ngModel указывали на две разные вещи escrowOffering
и selectedEscrowOffering
.
FormControl вызвал изменение события жизненного цикла для ngModel в результате:
<form [formGroup]="issuerDetails"
<div class="form-group">
<input
formControlName="escrowOffering"
[ngModel]="selectedEscrowOffering"
(ngModelChange)="onChangeEscrowDropdown($event)">
</div>
</form>
ngModel конфликтует с formControl
в том, как заданы значения, поэтому я сделал следующее:
- Удалить
formControlName
из HTML - Добавлено
[ngModelOptions]="{standalone: true}"
-> это заставляет элемент управления формы игнорировать это HTML - Добавлена привязка formControl в обратном вызове, так как мы все еще используем реактивные формы
, финальный код ниже:
<form [formGroup]="issuerDetails"
<div class="form-group">
<input
formControlName="escrowOffering"
[ngModel]="selectedEscrowOffering"
(ngModelChange)="onChangeEscrowDropdown($event)">
</div>
</form>
Так выглядит новая функция обратного вызова, ngModelChange
обновляет formControl
теперь
onChangeEscrowDropdown($event){
this.issuerDetailsForm.escrowOffering.setValue($event);
}
Дополнительные примечания
Песочница с кодом здесь изолирует только ngModel
и переменную isOnline
сама по себе, не вызывает перехватов жизненного цикла
https://stackblitz.com/edit/angular-bcsmux?file=src%2Fapp%2Fapp.component.html
Кроме того, в качестве альтернативы я мог бы полностью удалить ngModel
и использовать только реактивные формы. ValueChanges
мог использоваться для отслеживания изменений
https://www.tektutorialshub.com/angular/valuechanges-in-angular-forms/