【问题标题】:RxJs - subscribe to specific item in arrayRxJs - 订阅数组中的特定项目
【发布时间】:2018-06-05 00:30:42
【问题描述】:

我正在构建一个 Angular 应用程序,但在理解 RxJ 以及如何使用它来解决我的问题时遇到了一些问题。

假设我有一个组件需要 2 个 Item 类型的对象

export class TemplateComponent {

    private item1: Item;
    private item2: Item;

    constructor(private store: ItemStore) {

    }
}

还有Item类

export class Item {
    name: string;
    value: string;
}

如您所见,我还有一个用于项目的数据存储

export class ItemStore {
    public subscribedItems: Item[];

    constructor(private httpService: ItemHttpService) {

    }

    public getSubscribedItems() {
        this.httpService.getItems(this.subscribedItems)
            .subscribe(response => {
                this.subscriberItems = response;
            }
    }
}

ItemStore 中注入了一个 Service,它调用 API 来获取项目。

这个想法是有一个需要从 API 更新的订阅项目列表,因此每个需要绑定到项目的组件都可以将他们的项目添加到 subscribedItems 数组中,商店将从 API 获取新的项目不断地。这些项目实际上是传感器数据,因此它们的值会随着时间而变化,但它们的名称保持不变

是否有一个聪明的解决方案让我的 TemplateComponent 只订阅 item1 和 item2 的更改而不关心其余的项目,或者我是否需要订阅 subscribedItems 数组,然后通过它过滤我的方式以获得item1 和 item2 的新值?

【问题讨论】:

  • 所以基本上,让我看看我是否理解它,您将有一个将定期接收更新的项目列表,并且您希望从特定组件获取更新,比如说项目 2 和 4数组的?其余的物品会发生什么?即使其他组件没有“请求”它们,它们是否也会得到更新?或者您想让它们仅在组件请求它们时接收更新?
  • 只有当前在“open”组件中使用的项目才应该被请求,当组件被销毁时,这些项目的订阅应该完成,如果它们也没有被另一个打开组件。

标签: angular typescript rxjs reactive


【解决方案1】:

要解决您的问题,您应该使用 WebSocket 技术。这里描述了如何做到这一点的好例子Angular WS

【讨论】:

  • 是的,WebSockets 绝对是我将要使用的技术。我看到了 WebSockets 在从服务器获取数据到客户端以及简化服务和数据存储方面带来的改进,但我看不出它将如何帮助订阅数组中的特定项目。您能否扩展您的答案?
猜你喜欢
  • 2021-05-10
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 2021-07-26
  • 2016-12-10
相关资源
最近更新 更多