Angular8-从FormData获取值



我想从FormData对象中获取值:

  1. 弹出窗口中的My save((方法,我可以在其中上传文件:
save() {
this.frameworkEdited.next(this.frameworkPayload());
}
  1. 创建带有有效负载和所选文件的FormData对象的方法:
//this.fileToUpload is of type File
private frameworkPayload(): FormData {
const formData = new FormData();
formData.append('payload', JSON.stringify(this.getFrameworkPayload()));
if (!isNil(this.fileToUpload)) {
formData.append('file', this.fileToUpload, this.fileToUpload.name);
}
return formData;
  1. getFrameworkPayload((方法:
private getFrameworkPayload(): IFrameworkPayload {
const formValues = Object.assign({}, this.frameworkForm.value);
return {
id: formValues.id,
name: formValues.name,
active: formValues.active,
reviewRequired: formValues.reviewRequired,
parsingRequired: formValues.parsingRequired,
frameworkSortingType: {
id: formValues.id,
environmentalSortingType: formValues.frameworkSortingType.environmentalSortingType,
socialSortingType: formValues.frameworkSortingType.socialSortingType,
governanceSortingType: formValues.frameworkSortingType.governanceSortingType,
},
} as IFrameworkPayload;
}

在Observable方法中,我必须将editFramework和框架ID传递给服务方法,但我不能在中传递2个参数

frameworkEdited(editedFramework: FormData): void {
this.service.editFramework(editedFramework).pipe(
//HERE I NEED ID from FormData
editFramework(payload: FormData): Observable<IFramework> {
return this.http.put<IFramework>(`${this.url}/${payload['id']}`, payload);
}

因此,我需要从有效负载中获取ID:FormData。我尝试了payload.getAll('payload'(,但后来我得到了一个包含键值的字符串。。。也许我应该如何将这个字符串放入IFrameworkPayload并获取ID???

我能想到的最好的选择是重构您的editFramework((方法,使其接收有效负载,然后在该方法内创建FormData,如下所示:

editFramework(payload: IFrameworkPayload): Observable<IFramework> {
const formData = new FormData();
formData.append('payload', JSON.stringify(payload);
if (!isNil(this.fileToUpload)) {
formData.append('file', this.fileToUpload, this.fileToUpload.name);
}
return this.http.put<IFramework>(`${this.url}/${payload['id']}`, formData);
}

然后,您只需要更改保存和frameworkEdited方法,如下所示:

save() {
this.frameworkEdited.next(this.getFrameworkPayload());
}
frameworkEdited(payload: IFrameworkPayload): void {
this.service.editFramework(payload).pipe(

如果出于任何原因,您不喜欢这种方法,可以使用FormData.values((方法来获取值。您需要使用JSON.parse((将数据从JSON重新转换为IFrameworkPayload。不过,这似乎是不必要的工作。

最新更新