Я использую угловые формы, и я хотел бы использовать их встроенное обнаружение изменений для реализации функциональности в моем приложении.Когда пользователь нажимает кнопку, он должен видеть диалоговое окно, только если он / она внесла какие-либо изменения в форму.
У меня есть переменная changesMade:
private changesMade: boolean;
Это мой код TSформы:
this.carForm = new FormGroup({
name: new FormControl('', [
Validators.required,
Validators.pattern('[a-zA-Z ]*'),
Validators.minLength(1),
Validators.maxLength(10)
])});
Это мой HTML-код формы:
<form [formGroup]="carForm">
<ion-item>
<ion-label stacked>car name</ion-label>
<ion-input type="text" [(ngModel)]="carname" formControlName="name"></ion-input>
</ion-item>
</form>
Вот мой смоделированный (на данный момент) вызов службы, где я подписываюсь на изменения формы после того, как я 'мы устанавливаем значение carname, которое привязано к входу
setTimeout(()=>{
this.carname = "BMW";
this.carForm.valueChanges.subscribe(val => {
this.changesMade = true;
});
}, 44)
Проблема здесь в том, что, хотя я не трогал форму, this.changesMade получает значение true.
ПРИМЕЧАНИЕ. Если я переместу часть кода подписки в ngAfterViewInit, он все равно установит для changeMade значение true, даже если я не вводил значения:
ngOnInit(){
//simulated server call
setTimeout(()=>{
this.carname = "BMW";
}, 44)
}
ngAfterViewInit(){
this.carForm.valueChanges.subscribe(val => {
this.changesMade = true;
});
}
Я создал STACKBLITZ демонстрирует проблему.Как я могу заставить его выполнить this.changesMade = true;
только тогда, когда я на самом деле физически коснулся ввода в пользовательском интерфейсе?