angular - Angular 9 - 如何在不刷新页面的情况下调用 RestAPI?
问题描述
我正在使用具有用户注册表的 Angular CLI 9.0.7 开发一个 SPA 应用程序。用户注册后可以随时更改头像。为此,我创建了一个服务,该服务显示一个模式窗口,用户在其中选择他的图像,并且该服务在一个对象中返回图像。
然后将该图像发送到后端持久化,但是当调用 API Rest 时,页面会重新加载。
这是我的 HTML 文件:
<img
src="{{ imgProfile }}"
class="img-fluid img-thumbnail mx-auto"
(click)="onClickSelectNewImage()"
/>
这是我展示模态服务的方法:
onClickSelectNewImage(): void {
let currentImg: string = this.imgProfile;
this.modalService.showModalInputImage('Profile', currentImg, this._id).subscribe(
(img: IImagemBase64) => {
this.onUpdateImage(img);
},
(error: any) => {
console.log(error);
}
);
}
这是由模态服务返回的:
export interface IImagemBase64 {
id: string;
fileName: string;
imageBase64: string;
}
这是 API 调用:
private onUpdateImage(img: IImagemBase64) {
if (img && img.fileName) {
this._userService.updateUserImage(img).subscribe( // when this line is executed the page is reloaded - :/
(success: ICommandResponse) => {
const user: IUser = <IUser>success.data;
},
(error: any) => {
console.log(error);
}
);
}
}
这是后端服务调用:
public updateUserImage(request: IImagemBase64): Observable<ICommandResponse> {
let url: string = `${this._url}/${request.id}/imagem`;
return this._http.put<ICommandResponse>(url, request).pipe(take(1));
}
如何在不重新加载页面的情况下提交请求?
解决方案
发生的情况如下:后端正在接收一个 base64 字符串,将图像转换并保存在 assets\images 文件夹中。事实证明,assets 文件夹中的图像是静态的,由捆绑包优化。当图像被放置在那里时,并且当我处于开发环境中时,角度会识别更改,编译,自动执行并重新加载应用程序以反映他的更改。
为了解决这个问题,图像必须保存在另一个位置,例如服务器上的文件夹或 CDN。
推荐阅读
- vue.js - 在 then() 而不是 catch() 中捕获 axios 取消
- python - 将 if else 函数应用于 python / pandas 中的两个字符串列
- rust - 如何返回 Vec
来自锈迹斑斑的收藏品? - javascript - 如何将 Flatlist 项目传递到另一个屏幕 Flatlist?
- java - android 10 上的 MAC 地址错误
- java - 当父类没有实现接口时,在父类中实现接口的方法有什么风险?
- c# - 取最后一个 VchNo 和按月分组并在实体框架中求和总金额
- microsoft-graph-api - 教育作业返回拒绝访问
- css - Vue动画重启
- tcp - 使用 netty TCP 的 JMS 侦听器