我的服务包含一系列CRUD操作。其中一个是"得到所有"有点交易。所有返回HTTP observable都像:
getUsers(): Observable<User[]> {
return this.http.get(this.baseURL + '/api/users').map((response: Response) => response.json()).share();
}
现在,我有一个组件使用异步管道订阅了该服务:
this.users = this.userService.getUsers();
<md-list-item *ngFor="let user of users | async;>
在另一个组件中,我想调用getUsers
方法(因为它对数据执行了一些操作),并让其他组件自动更新。
this.service.getUsers()
当然不起作用,因为它需要订阅。
有什么方法可以订阅/观察永久性的吗?我错过了什么吗?
我经常做一些事情,其中组件直接订阅服务中的主题,我手动更新它。但是想知道是否有一些奇特的混淆方式。
答案 0 :(得分:2)
在从HTTP调用创建的observable的情况下,如果订阅两次,则相应的请求将被调用两次)默认情况下,这样的observable是冷的(它们不能被共享)。
您可以使用share
方法让您的观察性变得热烈:
import 'rxjs/add/operator/share';
this.users$ = this.userService.getUsers().share();