只有当某个属性改变时才订阅可观察对象

Subscribe an observable only if a certain property changed

本文关键字:对象 观察 改变 属性      更新时间:2023-09-26

我需要rxjs的subscribe方法被限制在某些属性更改。我试着用distinctUntilChanged做,但我想我错过了一些东西。

我只想订阅火,当属性data.members[]改变。

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

我如何应对明显的变化?

查看文档(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]

我猜你应该能够设置一些东西,如果没有,把你试过的贴回来。

.distinctUntilChanged((data) => { return data.members; }) works!我如何检查多个数组?(成员、亲戚、孩子)?

我想对数组中的变化做出反应(添加/删除项)。

使用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。等于API引用。