只有当某个属性改变时才订阅可观察对象
Subscribe an observable only if a certain property changed
我需要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引用。
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- $scope$观察数组中的一个特定对象——Angular JS控制器
- 无法观察Ember.js中的对象数组
- 如何从具有动态可观察属性的淘汰对象中获取 JSON 字符串
- 培根.js Bus.plug: 未捕获 错误: 不是可观察的 : [对象对象]
- 使用rxjs创建一个可观察的对象,该对象稍后将连接到web套接字
- 将$scope对象作为参数提供给$digest中的观察者背后的逻辑
- Knockoutjs当父对象's可观察到的变化
- 在ko.applyBindings(..)中执行Knockout js订阅函数(用于可观察对象)
- 聚合物通过父对象观察子属性
- Knockoutjs观察嵌套对象并订阅更改
- Knockout.js用单个json对象绑定一个可观察对象
- 使用AngularJS观察整个对象(深度观察)
- 无限循环当观察父对象时,观察者不更新任何值
- 向KO传递在对象内可观察到的计算值
- 根据某些条件将 JS 绑定到可观察对象内的数组元素
- 如何从下拉列表中由可观察数组填充的选定项中检索完整对象
- 如何创建挖空可观察数组/对象的深层副本
- 对象.观察顺序
- 对象.观察同步回调