【问题标题】:Trigger observable manually?手动触发可观察?
【发布时间】:2017-02-21 04:47:52
【问题描述】:

我有一个包含 CRUD 操作集合的服务。其中之一是“得到所有”的交易。所有返回 HTTP 可观察对象,如:

  getUsers(): Observable<User[]> {
    return this.http.get(this.baseURL + '/api/users').map((response: Response) => response.json()).share();
  }

现在,我有一个使用异步管道订阅服务的组件:

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

&lt;md-list-item *ngFor="let user of users | async;&gt;

在另一个组件中,我想调用getUsers 方法(因为它对数据执行了一些操作),并让另一个组件自动更新。

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

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

我通常会做一些事情,即组件直接订阅服务中的主题并手动更新它。但想知道是否有一些花哨的虚假方式。

【问题讨论】:

  • 组件一确实订阅了它。如果另一个组件执行this.service.getAll().subscribe(),该组件会做出反应吗?
  • @yurzui,就是这样!我无法将您的评论标记为答案。 :)

标签: angular


【解决方案1】:

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

您可以使用 share 方法使您的 observable 变热:

import 'rxjs/add/operator/share';

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多