0

我正在开发一个角度应用程序,其中我有一个带有一些字段的表单的模态对话框。其中之一是我有一个异步验证器来检查一个值是否只存在于调用 BE api 的数据库中。

我需要在我更改该字段的输入和提交表单时触发验证。

在提交表单之前,我需要重新检查所有字段,并且我必须等待 async-validator 响应,然后才能说整个表单是有效的。

我找到了一种方法来做到这一点,而且效果很好。

    ...
    formSubmitSubject$ = new Subject();
    ...
     ngOnInit() {
     ....
      this.formSubmitSubject$
      .pipe(
        tap(() => this.form.markAsDirty()),
        switchMap(() =>
          this.form.statusChanges.pipe(
            startWith(this.form.status),
            filter((status: string) => status !== 'PENDING'),
            take(1)
          )
        ),
        filter((status: string) => status === 'VALID')
        )
        .subscribe(() => {
          return this.sendRequest();
        });
        ...
      }

      onSubmit() {
          this.formSubmitSubject$.next();
      }
      ....

当我提交表单时,我可以等待所有同步/异步验证器完成,然后如果表单中的所有字段都有效,则提交表单。

现在我需要在这个组件内部创建一个方法

    checkFormValidity(): boolean {
        // code
    }

我可以从其他组件调用,并等待使用 formSubmitSubject$ 完成所有同步/异步验证并返回表单的状态。

那么,是否可以将 subject.pipe().subscribe() 放入一个方法中并仅在全部解决后才返回布尔值?

提前致谢!

4

0 回答 0