我正在开发一个角度应用程序,其中我有一个带有一些字段的表单的模态对话框。其中之一是我有一个异步验证器来检查一个值是否只存在于调用 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() 放入一个方法中并仅在全部解决后才返回布尔值?
提前致谢!