【发布时间】:2020-08-10 16:25:27
【问题描述】:
我有以下问题:
我想制作一个包含条目(Obj)的表格。其中一些具有文件属性。 如果他们有文件属性(entry.file),我想进行后端调用以获取该文件的 url:
public getFileURL(archiveID: string, documentID: string, sysID: string){
const request: FileRequest = {
archiveID: archiveID,
documentID: documentID,
sysID: sysID
};
this.fileService.file(request).subscribe(response => {
if (response) {
return response;
}
})
}
这被称为:getFileURL(entry.file.archiveID, entry.file.documentID, entry.file.sysID) 它应该返回一个 Observable,所以我可以检查我是否得到了后端响应。
<tr *ngFor="let entry of period.claims; let i = index">
...
<td>
<div *ngIf="entry.file">
<div *ngIf="fileClientService.getFileURL(entry.file.archiveID, entry.file.documentID, entry.file.sysID) | async as file; else loading">
<a target="about:blank" class="download" (click)="clickLink(file)"></a>
</div>
<ng-template #loading let-file>loading..</ng-template>
</div>
</td>
我想要的只是显示“正在加载”,直到加载 url,然后显示 a-tag。 此外,从后端返回的 url 参数可能为空。因此,如果 url 为空(“”),我也不需要显示任何内容。 目前,它会触发数百个后端调用,调用 2 个具有 entry.file 属性的对象:(
我对 Observables 不太擅长,我希望有人可以帮助我。 到目前为止谢谢你:)
【问题讨论】:
-
你在上面的代码中遇到了什么问题?
-
我强烈建议事先使用 switchMap 将文件对象映射到 url。
-
它每分钟产生数百个后端调用。但它应该每个 URL 只调用一次。
标签: html angular typescript rxjs