2016-08-18 53 views
2

我需要將rxjs的subscribe方法限制爲某些財產變更。我試圖用distinctUntilChanged做到這一點,但我想我錯過了一些東西。只有在特定財產發生變化時才訂閱可觀察項

我只想訂閱消防,當財產data.members[]改變。

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

我該如何應對不同的變化?

+0

你是否對'data.members'屬性的** reference **值做出了不同的修改?或對'data.members'屬性引用的數組的**內容**有明顯的更改? – georgeawg

+0

我想對數組內的更改作出反應(項目添加/刪除)。 –

回答

0

望着documentation (Rxjs v4),我看你應該能夠達到你想要什麼,用Rx.Observable.prototype.distinctUntilChanged([keySelector], [comparer]),並使用keySelector選擇要檢測其變化,並comparer參數檢測平等的財產。

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