2016-08-18 2 views
2

rxjsのsubscribeメソッドを特定のプロパティの変更に制限する必要があります。私はdistinctUntilChangedでそれをやろうとしましたが、何か不足していると思います。特定のプロパティが変更された場合にのみオブザーバブルを購読する

プロパティdata.members[]が変更されたときにのみ登録を希望します。

this.myService.loadData(this.data.id) 
    .distinctUntilChanged() 
    .subscribe(data => { 
    this.data = data; 
    console.log("data changed", data); 
}); 

個別の変更にどのように対応できますか? documentation (Rxjs v4)を見て

+0

'data.members'プロパティ**の参照**値の個別の変更に反応するのですか? 'data.members'プロパティが参照する配列の** contents **に対する明確な変更はありますか? – georgeawg

+0

私は配列内の変更に反応したい(追加/削除された項目)。 –

答えて

0

、私はあなたがRx.Observable.prototype.distinctUntilChanged([keySelector], [comparer])で、あなたが望むものを達成することができ、そしてその変化あなたが検出したい、とcomparerパラメータ平等を検出するためのプロパティを選択しkeySelectorを使用しなければならないことがわかります。

Rxjs v5は、同様の機能を備えたdistinctUntilKeyChangeddistinctUntilChangedを持っています。あなたが使用例のテストで見ることができ

:[https://github.com/ReactiveX/rxjs/blob/master/spec/operators/distinctUntilChanged-spec.tshttps://github.com/ReactiveX/rxjs/blob/master/spec/operators/distinctUntilKeyChanged-spec.ts]

を私はあなたが何かを設定し、そうでない場合は、あなたがしようとしたものをバック投稿することができなければならないことから推測します。

+0

'.distinctUntilChanged((data)=> {return data.members;})'が動作します!どうすれば複数の配列を調べることができますか? (メンバー、関係、子供)? –

0

.distinctUntilChanged((data) => { return data.members; })作品!どうすれば複数の配列を調べることができますか? (メンバー、関係、子供)?

私は配列内の変更に反応したい(追加/削除されたアイテム)。

深い比較を行うにはangular.equalsを使用してください。

this.myService.loadData(this.data.id) 
    .distinctUntilChanged((data) => (data.members), (a,b) => (angular.equals(a,b)) 
    .subscribe(data => { 
    this.data = data; 
    console.log("data changed", data); 
}); 

distinctUntilChangedの詳細については、RxJS distinctUntilChanged API Referenceを参照してください。

angular.equalsの詳細については、AngularJS angular.equals API Referenceを参照してください。

関連する問題