首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角度:可观察到多次执行请求

角度:可观察到多次执行请求
EN

Stack Overflow用户
提问于 2017-10-05 08:18:28
回答 2查看 4.7K关注 0票数 5

我用的是可观察的

服务

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

组件

代码语言:javascript
复制
members$: Observable<any[]>;
ngOnInit() {
 this.members$ = this._membersService.getMembers()
}

请求

代码语言:javascript
复制
-getUsers
-getUsers

都返回相同的JSON数据

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-05 09:19:08

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

代码语言:javascript
复制
import 'rxjs/add/operator/share';

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

有关运算符的更多信息可以找到这里

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

代码语言:javascript
复制
//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>
票数 12
EN

Stack Overflow用户

发布于 2019-08-08 01:28:38

如果您在角6+中遇到这种情况,请进行更新。

代码语言:javascript
复制
import { share } from 'rxjs/operators';
...
this._membersService.getMembers().pipe(share());

现在是正确的语法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46580929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档