我正在使用 Angular 5,反应形式的方法。
我在 Angular Material 对话框中有一个表单,用于输入和编辑数据。我的构造函数如下所示:
constructor(public formBuilder: FormBuilder,
public documentService: DocumentService,
@Inject(MAT_DIALOG_DATA) public data: any) {
this.createForm();
if (this.data.edit) {
this.setValues();
}
this.setTitles();
}
该createForm
调用创建了我进行异步验证的反应形式:
createForm() {
this.documentForm = this.formBuilder.group({
...
documentNumber: new FormControl('',
{
updateOn: 'blur',
validators: [Validators.required],
asyncValidators: [this.checkDocumentNumber.bind(this)]
}),
...
});
}
如果对话框处于“编辑”模式,则setValues
调用修补需要编辑的数据:
setValue() {
this.form.patchData({
...
documentNumber: this.data.document.documentNumber
...
});
}
该setTitles
调用设置对话框标题。
checkDocumentNumber
调用从服务器获取一个值boolean
:
checkDocumentNumber(control: AbstractControl): Observable<ValidationErrors | null> {
const formValue = this.form.value;
return this.documentService
.checkDocumentNumber(new Document(this.data.edit ? this.data.document.id : 0,
form.documentNumber)).pipe(map((response: boolean) => {
return response ? { inUse: true } : null;
}));
}
进行的 API 调用是:
checkDocumentNumber(doc: Document) {
return this.http.post(`/Documents/Inbox/CheckDocumentNumber`, doc);
}
“编辑”模式下的表单对话框调用如下:
this.dialogService.open(DocumentDialogComponent,
{
data: {
edit: true,
document: this.document
}
});
我遇到的问题是,当我打开对话框来编辑文档数据时,会进行 9 个 API 调用来检查文档编号。前 5 个被取消,然后一个返回200
,另一个被取消,最后两个返回200
。
应用程序不同部分的相同场景让我取消了 3 个电话和两个200
电话。
如何阻止 Angular 进行这些不必要的 API 调用?在 Angular 5 之前,该updateOn
标志不存在,所以我认为没有它,这将不会发生。
以下是正在执行的 API 调用的屏幕截图: