需要帮助在 angular 中执行 PUT 函数后执行 GET
Need help executing GET after PUT function in angular
我在 angular 中创建了一个弹出窗口,可以编辑具有名称和图像的主题 属性 并更新 (PUT) 到服务器。
保存后,我的组件将 GET
显示在视图中的主题,基于由弹出窗口 return 编辑的 Id
。
这里的 PUT
方法 运行 比 GET
慢得多,导致我的视图无法更新,因为它 GET
旧主题,而不是更新的主题。
当我关闭对话框时调用 PUT
函数。关闭后,我订阅以获取主题结果,以及 运行 GET
函数。
topic.component.ts
, editTopic()
当我点击编辑按钮时调用方法,将所选主题传递给对话框数据然后弹出。关闭后,我得到结果(这是更新的主题)和 GET
服务器中的主题,主题 ID 再次出现。
private openEditDialog(topic: Topic) {
let dialogConfig = new MatDialogConfig();
dialogConfig.panelClass = 'edit-dialog-component';
dialogConfig.width = '1027px';
dialogConfig.height = '491.12px';
dialogConfig.position = {top: '138px'};
dialogConfig.data = topic;
return dialogConfig;
}
public editTopic(topic: Topic): void {
const dialogRef = this.matDialog.open(EditDialogComponent, this.openEditDialog(topic));
dialogRef.afterClosed().subscribe(
(res: any) => {
if (res) {
this.getTopicById(res.get('id').value);
}
},
(err) => console.error(err)
);
}
edit-dialog.component.ts
, onSave
运行 当我点击保存时,post 图片文件和主题名称到服务器 return FormGroup
在视图中显示的值
public onSave(): void {
const formData = new FormData();
let topic = {
id: this.topicForm.get('id').value,
name: this.topicForm.get('title').value
};
formData.append('newsTopic', JSON.stringify(topic));
if (this.file) {
formData.append('file', this.file);
}
console.log(formData);
this.topicService.updateTopicImage(formData)
.subscribe((res) => {
if (res) {
this.topicForm.patchValue({
id: res.id,
title: res.name,
imageURL: res.image
});
}
});
this.dialogRef.close(this.topicForm);
}
updateTopicImage PUT 表单数据到服务器
public updateTopicImage(formData) {
return this.httpClient.put<any>(APIurl, formData);
}
我预计 GET
到 运行 在 PUT
之后,因为 subscribe()
方法。但似乎它们 运行 同时(?)和 PUT
只是在需要更新图像文件时速度较慢。不知道怎么解决,希望大家看看。
在订阅中移动关闭并发送 id,然后使用它应该可以工作,因为订阅将在数据完成修补时关闭,并且不会像现在这样提前关闭以及发送 id将使您不必再进行查询
我认为你的问题来自
this.dialogRef.close(this.topicForm);
这里的问题是您在服务器上调用了 PUT 方法,并且在关闭弹出窗口之前没有等待服务器的响应。
你能试试这个吗
public onSave(): void {
const formData = new FormData();
let topic = {
id: this.topicForm.get('id').value,
name: this.topicForm.get('title').value
};
formData.append('newsTopic', JSON.stringify(topic));
if (this.file) {
formData.append('file', this.file);
}
console.log(formData);
this.topicService.updateTopicImage(formData)
.subscribe((res) => {
if (res) {
this.topicForm.patchValue({
id: res.id,
title: res.name,
imageURL: res.image
});
// I've put the return inside the response of the PUT call.
this.dialogRef.close(this.topicForm);
}
});
}
编辑
为这个改变这个方法
public updateTopicImage(formData) {
return this.httpClient.put<any>(APIurl, formData.value);
}
您不能将表单发送到 API,您必须将表单内的对象发送到 API。
我在 angular 中创建了一个弹出窗口,可以编辑具有名称和图像的主题 属性 并更新 (PUT) 到服务器。
保存后,我的组件将 GET
显示在视图中的主题,基于由弹出窗口 return 编辑的 Id
。
这里的 PUT
方法 运行 比 GET
慢得多,导致我的视图无法更新,因为它 GET
旧主题,而不是更新的主题。
当我关闭对话框时调用 PUT
函数。关闭后,我订阅以获取主题结果,以及 运行 GET
函数。
topic.component.ts
, editTopic()
当我点击编辑按钮时调用方法,将所选主题传递给对话框数据然后弹出。关闭后,我得到结果(这是更新的主题)和 GET
服务器中的主题,主题 ID 再次出现。
private openEditDialog(topic: Topic) {
let dialogConfig = new MatDialogConfig();
dialogConfig.panelClass = 'edit-dialog-component';
dialogConfig.width = '1027px';
dialogConfig.height = '491.12px';
dialogConfig.position = {top: '138px'};
dialogConfig.data = topic;
return dialogConfig;
}
public editTopic(topic: Topic): void {
const dialogRef = this.matDialog.open(EditDialogComponent, this.openEditDialog(topic));
dialogRef.afterClosed().subscribe(
(res: any) => {
if (res) {
this.getTopicById(res.get('id').value);
}
},
(err) => console.error(err)
);
}
edit-dialog.component.ts
, onSave
运行 当我点击保存时,post 图片文件和主题名称到服务器 return FormGroup
在视图中显示的值
public onSave(): void {
const formData = new FormData();
let topic = {
id: this.topicForm.get('id').value,
name: this.topicForm.get('title').value
};
formData.append('newsTopic', JSON.stringify(topic));
if (this.file) {
formData.append('file', this.file);
}
console.log(formData);
this.topicService.updateTopicImage(formData)
.subscribe((res) => {
if (res) {
this.topicForm.patchValue({
id: res.id,
title: res.name,
imageURL: res.image
});
}
});
this.dialogRef.close(this.topicForm);
}
updateTopicImage PUT 表单数据到服务器
public updateTopicImage(formData) {
return this.httpClient.put<any>(APIurl, formData);
}
我预计 GET
到 运行 在 PUT
之后,因为 subscribe()
方法。但似乎它们 运行 同时(?)和 PUT
只是在需要更新图像文件时速度较慢。不知道怎么解决,希望大家看看。
在订阅中移动关闭并发送 id,然后使用它应该可以工作,因为订阅将在数据完成修补时关闭,并且不会像现在这样提前关闭以及发送 id将使您不必再进行查询
我认为你的问题来自
this.dialogRef.close(this.topicForm);
这里的问题是您在服务器上调用了 PUT 方法,并且在关闭弹出窗口之前没有等待服务器的响应。
你能试试这个吗
public onSave(): void {
const formData = new FormData();
let topic = {
id: this.topicForm.get('id').value,
name: this.topicForm.get('title').value
};
formData.append('newsTopic', JSON.stringify(topic));
if (this.file) {
formData.append('file', this.file);
}
console.log(formData);
this.topicService.updateTopicImage(formData)
.subscribe((res) => {
if (res) {
this.topicForm.patchValue({
id: res.id,
title: res.name,
imageURL: res.image
});
// I've put the return inside the response of the PUT call.
this.dialogRef.close(this.topicForm);
}
});
}
编辑
为这个改变这个方法
public updateTopicImage(formData) {
return this.httpClient.put<any>(APIurl, formData.value);
}
您不能将表单发送到 API,您必须将表单内的对象发送到 API。