Angular:Observable 多次执行请求

标签 angular rxjs angular2-http

我正在使用 observable

服务

getMembers(): Observable<any[]> {
return this._http.get('http://localhost/membership/main/getUsers')
  .map(response => response.json() );
}

组件

members$: Observable<any[]>;
ngOnInit() {
 this.members$ = this._membersService.getMembers()
}

请求

-getUsers
-getUsers

两者都返回相同的 JSON 数据

每次我加载页面时,它都会返回一个重复的请求。这与冷热要求无关。因为两个请求返回相同的响应。但是当我删除可观察对象时,一切正常。只有一个请求

最佳答案

我猜您在模板中的两个不同位置使用了 async 管道。为避免重新执行请求,您可以使用 share 运算符

import 'rxjs/add/operator/share';

members$: Observable<any[]>;
// I personally prefer to set observables in ctor
constructor() {
 this.members$ = this._membersService.getMembers().share();
}

可以找到有关运营商的更多信息 here

另一种方法是在 ng-container 的帮助下在一个地方使用 async 管道:

//template
<ng-container *ngIf="members$ | async as members">
   <span *ngIf="members.length === 0; else showMembers">No members!</span>
   <ng-template #showMembers>
     <div *ngFor="let member of members">{{member | json}}</div>
   </ng-template>
</ng-container>

关于Angular:Observable 多次执行请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46580929/

相关文章:

Angular sourceMap 损坏

javascript - Rxjs 摆脱双重订阅

angular - 如何使用与angular2 http服务的保持连接

angular - 处理 204-HTTP Observable 中的无内容响应-Angular2

angular - 通过单击按钮关闭 Angular CDK 覆盖

angular - 在生产中更改或换出 Service Workers 的正确步骤是什么?

javascript - 如何在另一个 Observable 发出时停止发出的值?

Angular rxjs Observables 查找第一个事件服务器

angular - 是否有可能以某种方式同步调用异步 ionic 存储?

angular - Angular 中可重用的自定义组件列表