2017-12-22 18 views
0

私はAngularアプリケーションを構築していますが、RxJを理解する上で問題があり、問題を解決するためにそれを使用する方法があります。RxJs - アレイ内の特定のアイテムを購読する

のは、あなたが見ることができるように私は、私もアイテム

用のデータストアをItem型の2つのオブジェクト

export class TemplateComponent { 

    private item1: Item; 
    private item2: Item; 

    constructor(private store: ItemStore) { 

    } 
} 

とItemクラス

​​

を必要とするコンポーネントを持っているとしましょう

export class ItemStore { 
    public subscribedItems: Item[]; 

    constructor(private httpService: ItemHttpService) { 

    } 

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

ItemStoreには、項目を取得するAPIを呼び出すサービスが挿入されています。

アイデアは、APIから更新する必要があるサブスクリプションされたアイテムのリストを持つことで、アイテムへのバインドが必要な各コンポーネントはアイテムをsubscribedItems配列に追加でき、ストアは新しいアイテムをAPIを継続的に使用します。アイテムは実際にセンサデータなので、値は時間とともに変化することがありますが、その名前は同じです。

私のTemplateComponentはitem1とitem2のみの変更を購読でき、残りのアイテムは気にしませんか? 、または私はsubscribedItems配列を購読し、それを通過してitem1とitem2の新しい値を取得する必要がありますか?

+0

基本的に、私が理解しているかどうかを見てみましょう。定期的にアップデートを受け取るアイテムのリストがあります。配列の項目2と4を考えてみましょう。残りのアイテムはどうなりますか?他のコンポーネントによって「要求されていない」場合でも更新されますか?あるいは、コンポーネントがコンポーネントを要求したときにのみアップデートを受け取るようにしたいのですか? –

+0

「オープン」コンポーネントで現在使用されているアイテムのみを要求する必要があります。コンポーネントiが破棄されたときに、それらのアイテムのサブスクリプションは、別の開いているコンポーネントによって監視されていない場合に完了する必要があります。 –

答えて

0

問題を解決するには、WebSocketテクノロジーを使用する必要があります。これを行う方法の大きな例がここに記載されていますAngular WS

+0

はい、WebSocketsは私が使用する絶対的な技術です。私はWebSocketがサーバーからクライアントにデータを取得し、サービスとデータストアを単純化する点で改善が見られますが、配列内の特定の項目を購読するのに役立つ方法はわかりません。 答えを拡大してもよろしいですか? –

関連する問題