2017-02-21 115 views
1

我有一个CRUD操作集合的服务。其中之一是一个“全部”的交易。所有返回HTTP观测,如:手动触发观察值?

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;>

而在另一部分,我会喜欢调用方法(因为它对数据执行了一些操作),并让其他组件自动更新。

this.service.getUsers()当然不起作用,因为它需要订阅。

有没有办法让订阅/可观察永久?我错过了什么吗?

我通常做一些事情,组件直接订阅服务中的主题,我手动更新它。但想知道是否有一些奇特的方法。

+0

组件一个人订阅。如果另一个组件做'this.service.getAll()。subscribe()'? – Charlie

+0

@yurzui,就是这样!我不能将你的评论标记为答案。 :) – Charlie

回答

2

对于通过HTTP调用创建的observable,如果订阅了两次,则相应的请求将被调用两次)默认情况下,这些observable是冷的(它们不能共享)。

你可以让你观察到的热利用share方法:

import 'rxjs/add/operator/share'; 

this.users$ = this.userService.getUsers().share();