2017-10-18 13 views
0

私はアンギュラ4で作業し、観察可能な概念を発見します...Oservableのアイテムを取得

私はこのオブジェクトを持っています。

例と return MyObjectない Observableのための私の object.name == 'titi'のプロパティ名を持つオブジェクトを見つけた私は希望
myobjects: Observable<MyObject[]>; 

...

let toto: MyObject; 
toto = this.myobjects.filter((tb: MyObject[], i: number) => { 
       return tb[i].name=== "titi"; 
      }). 
      subscribe((tbs: MyObject[]) => { 
       toto = tbs; 
      }); 

それは可能ですか? 私は..私は理解していない を見つけることができません:(

+0

サブスクライブする方法でフィルタリングを行うことができます – learner

答えて

3

ストリームを扱うとき、あなたが可能な場合は副作用を避ける必要があります願っています。クラス変数に再度割り当てる代わりに、あなたはむしろobservableパターンを採用して行う必要があります。

const selectedPers$ = this.personArray$ 
    .map(arr => arr.find(pers => pers.name === 'titi')) 
    .filter(pers => !!pers); 

をそしてあなたのビューでそのような非同期パイプを使用します。必要であれば

<p>The selected person is {{ selectedPers$ | async | json }}</p> 

を例えば名前や人物の年齢、あなたが行う可能性があります表示するには:

<div *ngIf="selectedPers$ | async as selectedPers"> 
    <p>Person's name is: {{ selectedPers.name }}</p> 
    <p>Person's age is: {{ selectedPers.age }}</p> 
</div> 

この方法で、personArray$は新しい価値を発するあなたのたびに、選択したPERSが更新されます。

+0

あなたのケースでselectedPers $はObservable ですが、私には見えません – lg0173

+0

それは全体のポイントです。 – Maxime

+0

私はあなたの質問が「変数に抽出する方法」について知っていますが、観察可能なものを発見しているときには反応的なプログラミングを受け入れるようにアドバイスしています。不変で機能的で反応的に進むほど、デバッグして新しいものを作成するのが最も簡単です(オブザーバブルの仕組みを理解すれば)。 – Maxime

1

uは何をすべきかすべてがこのObservableに加入すると、アレイは、その後、uはそのを入れたい値を取得するための配列をフィルタリングしますです。あなたのオブジェクトの値

ここでは簡単な解決策です:

myobjects: Observable<MyObject[]>; 
let toto: MyObject; 
this.myobjects.subscribe(result => 
     let newArray = result.filter(object => object.name === 'titi'); 
     if(newArray.length === 1) 
     this.toto = newArray[0]; 
); 

それはあなたを助けます:)

+0

ありがとうございましたaliは動作します – lg0173

+0

それは動作しますが、それを行う最良の方法ではありません。また、サブスクリプションをクラス変数に保存し、メモリリークを避けるために 'ngOnDestroy'に対してunsubscribeを呼び出さなければならないことに注意してください。私はあなたがそれをしてはいけないと言っているわけではありませんが、このユースケースでは、非同期パイプのおかげでコンポーネントが破壊されたときに自動的に退会する私の答えを見てください。 – Maxime

+0

このようにしたい場合は、この[質問](https://stackoverflow.com/questions/46801402/angular-4-best-way-of-unsubscribing/46805001#46805001) – Maxime

関連する問題