我需要将rxjs的subscribe
方法限制为某些属性更改。我尝试用distinctUntilChanged
来做,但我想我错过了一些东西。
当属性data.members[]
发生变化时,我只想订阅火。
this.myService.loadData(this.data.id)
.distinctUntilChanged()
.subscribe(data => {
this.data = data;
console.log("data changed", data);
});
我如何应对不同的变化?
答案 0 :(得分:0)
查看documentation (Rxjs v4),我发现您应该能够使用Rx.Observable.prototype.distinctUntilChanged([keySelector], [comparer])
实现所需目标,并使用keySelector
选择要检测其更改的属性和comparer
参数来检测相等性。
Rxjs v5的distinctUntilKeyChanged和distinctUntilChanged具有相似的功能。
您可以查看测试用例:[https://github.com/ReactiveX/rxjs/blob/master/spec/operators/distinctUntilChanged-spec.ts,https://github.com/ReactiveX/rxjs/blob/master/spec/operators/distinctUntilKeyChanged-spec.ts]
我猜你应该能够设置一些内容,如果没有,请回复你所尝试的内容。
答案 1 :(得分: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。