2016-08-19 6 views
1

3つのオブジェクトキーの1つが変更された場合、oberservableに.subscribe()を発射したいと思います。私は&をコピーする場合複数のキーを持つRXJS-dinstinctUntilChange

それは動作しますが、各キーのための方法を貼り付けます。

this.myService.loadData(this.dataContainer.id, true) 
     .distinctUntilChanged((updatedData) => { return updatedData.relations; }) 
     .subscribe(updatedData => { 
     console.log("relations changed",updatedData); 
    }); 

this.myService.loadData(this.dataContainer.id, true) 
     .distinctUntilChanged((updatedData) => { return updatedData.parent; }) 
     .subscribe(updatedData => { 
     console.log("parent changed",updatedData); 
    }); 

this.myService.loadData(this.dataContainer.id, true) 
     .distinctUntilChanged((updatedData) => { return updatedData.children; }) 
     .subscribe(updatedData => { 
     console.log("children changed",updatedData); 
    }); 

私は全体updatedDataオブジェクトを返すようにdistinctUntilChanged比較演算を設定した場合、私の購読発射することはありません。

dinstinctUntilChangedの3つを1つの減速機に組み合わせるにはどうすればよいですか?

答えて

0

一つの方法:

const data$ = this.myService.loadData(this.dataContainer.id, true); 

Observable 
    .combineLatest(
    $data.distinctUntilChanged(data => updatedData.relations), 
    $data.distinctUntilChanged(data => updatedData.parent), 
    $data.distinctUntilChanged(data => updatedData.children), 
    data => data 
) 
    .subscribe(updatedData => { 
    console.log("relation|parent|children changed", updatedData); 
    }); 
+0

完璧なソリューション、ありがとう! –

0

別のオプションは、セレクタ内のすべてのデータを返すようになり、比較機能で、異なる特性を比較することがあります

this.myService.loadData(this.dataContainer.id, true) 
    .distinctUntilChanged((updatedData) => { return updatedData; }, (a, b) => { 
    return a.relations === b.relations && a.parent === b.parent && a.children === b.children; 
    }) 
    .subscribe(updatedData => { 
    console.log("updatedData", updatedData); 
}); 
0

私がやってしまいました:

.distinctUntilChanged((a, b) => a.key1 === b.key1 && a.key2 === b.key2); 
関連する問題