Как лучше всего дождаться проверки действительности в onSubmit? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть реактивная форма, в которой есть асинхронные валидаторы для API сервера. Из-за особых обстоятельств мне нужно повторно проверить форму в рамках функции отправки. В настоящее время я борюсь с тем, как ждать завершения повторной проверки. Пожалуйста посоветуй. Спасибо тебе.

onSubmit() {
  this.myForm.updateValueAndValidity();

  someObservable() // what to put here?
  .subscribe((stillValid: boolean) => {
    if (stillValid) send();
  }
}

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Ух ты, я писал об отсутствии способности элегантно справляться с этим с помощью угловых форм. Обработка успеха - это ответственность каждого.

Если бы мы могли записывать пользовательские события в StatusMessages FormGroup, возможности безграничны.Но мы не можем.

Нет способа узнать или использовать какой-либо тип успеха.Один существует, но его нельзя использовать с точки зрения реактивных форм. Команда Angular знает об этом .

Вот что я делаю, когда у меня есть несколько форм на странице:

public onSubmit(subject: string, index: number) {
    if (!this.form.valid) { return; } // validity check
    this.formSuccess(index);
}

public formSuccess(index): void {
    this.success[index] = false;
    if (this.success[index] === false) {
        this.success[index] = true;
        setTimeout(() => {
            this.success[index] = false;
        }, 2000);
    }
}

Вид: .submitted.success исчезает в течение 5секунд и постепенно исчезает.

<div class="submitted" [ngClass]="{'success': success}">
    Thanks for submitting!
</div>

(я буду работать над упрощенным примером StackBlitz и отправлю сообщение обратно)

0 голосов
/ 11 июня 2019

Подписаться на изменения статуса,

this.myForm.statusChanges.pipe(skip(1)).subscribe(status => {
  if (status === 'VALID') send();
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...