Как правильно 2-way-bind с реактивными формами?

До сих пор я всегда видел, что вы не должны смешивать, используя [(ngModel)] с реактивными формами, а вместо этого просто использовать formControlName,

Тем не менее, для меня это не похоже на работу?

У меня есть форма, и я добавляю к ней элементы управления

this.exportForm.addControl("surcharge", new FormControl(this.details.SurchargeExtraField));

и в моем HTML я даю вход formControlName

    <div class="col-sm-12 col-md-6">
        <input type="text" formControlName="surcharge" />
    </div>

Однако, когда я использую ввод, это ничего не меняет в this.details.SurchargeExtraField, это работает только для проверки.

Когда я делаю:

<input type="text" formControlName="surcharge" [(ngModel)="details.SurchargeExtraField" />

Это работает отлично, но, видимо, это не правильный путь.

2 ответа

Вы можете прослушать изменения формы, используя эту

  this.exportForm.valueChanges.subscribe((form) => {
     console.log(form);
   });

Для получения дополнительной информации о реактивной форме проверьте эту ССЫЛКУ

То же самое применимо к любому FormControl в форме, в которой вы можете искать изменения и действовать соответственно

Вы можете слушать изменения формы, как это

this.exportForm.valueChanges.subscribe((changes) => {
     console.log(changes);
});

или вы можете слушать изменения формы управления, как это

this.exportForm.get('surcharge').valueChanges.subscribe((change) => {
     console.log(change);
});

или вы можете сделать это

onChange (newVal) {
   console.log(newVal);
}

<input type="text" formControlName="surcharge" #surchargeInput (change)="onChange(surcharge.target.value)"/>

нет причин не смешивать formControlName и ngModel следующим образом:

<input type="text" id="name" [(ngModel)]="surcharge" 
       class="form-control" formControlName="surcharge">
Другие вопросы по тегам