У меня есть форма, которая отправляет свои данные на сервер для проверки. Если бэкэнд выдает ошибку типа «Адрес уже существует», он будет отображаться в форме.
Проблема в том, что когда я нажимаю кнопку «Сохранить», директива изменит цвет и текст на 'сохранено' перед ожиданием ответа от бэкэнда.
Как мне дождаться ответа от бэкэнда перед реализацией директивы? Можно ли как-то перехватить и «приостановить» событие от достижения кнопки?
<form method="post" #form="ngForm" name="myAddressForm" [ngClass]="{ submitted: submitted }"
(ngSubmit)="createAddress(form)" name="myAddressForm" [checkValid]>
<div class="form-group">
<label class="label">Address</label>
<input #address_1="ngModel" name="address_1 [(ngModel)]="payload.addressData.address_1" type="text"
[appFormError]="address_1" class="form-control" required />
</div>
<div class="col-lg-2 col-md-6 col-12">
<button class="btn btn-block btn-black btn-card" appSaveButton>save</button>
</div>
</div>
</form>
и ниже моя директива
import { Directive, HostListener, ElementRef, Renderer2 } from '@angular/core';
@Directive({
selector: '[appSaveButton]'
})
export class SaveButtonDirective {
public saveButton;
constructor(private el: ElementRef, private renderer: Renderer2) {
this.saveButton = this.el.nativeElement;
}
@HostListener('click') onMouseClick(): void {
// Check to see if form is valid
// Get a reference to the form
// If valid, change the button display
// Else, do nothing.
this.changeButtonDisplay('#0065c5', 'saved');
}
@HostListener('document:click', ['$event']) onClick(event): void {
if (this.saveButton !== event.target) {
this.changeButtonDisplay('black', 'save');
}
}
changeButtonDisplay(color = 'black', text = 'save') {
this.renderer.setStyle(this.saveButton, 'backgroundColor', color);
this.renderer.setStyle(this.saveButton, 'borderColor', color);
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', text);
}
}