我需要更新可观察对象的属性。我设法让它工作,但我真的不喜欢我是怎么做到的。
next(filter$: BehaviorSubject<GridCollectionFilter>, collection: GridCollectionModel<any>) {
let filter = filter$.value;
if (!filter.page) {
filter.page = 1;
}
filter.page++;
if (filter.page > collection.pageCount) {
filter.page = collection.pageCount;
}
this.updateFilter(filter$);
}
first(filter$: BehaviorSubject<GridCollectionFilter>) {
filter$.value.page = 1;
this.updateFilter(filter$);
}
last(filter$: BehaviorSubject<GridCollectionFilter>, collection: GridCollectionModel<any>) {
filter$.value.page = collection.pageCount;
this.updateFilter(filter$);
}
updateFilter(filter$: BehaviorSubject<GridCollectionFilter>, filter?: GridCollectionFilter) {
filter$.next(_.clone(filter || filter$.value));
}
在这种情况下,是否有更优雅的方式来更新filter$
值对象?
filter$.next(_.clone(filter$.value))
我真的不喜欢每次我只想通过代码更新被观察对象的一些属性时,将可观察对象的克隆喂给自己的想法。我_.clone()
用来破坏引用(否则 rxjsdistinctUntilChanged()
不会因为明显的原因触发)。
是否有某种 rxjs 扩展可以缩短我正在做的事情?我正在考虑一些filter$.commitValueChanges()
内部会做的事情filter$.next(_.clone(filter$.value))
。
我对 observables 很陌生,所以我不确定我是否一开始就以完全错误的方式考虑这个问题。我知道当我想触发更改侦听器时,我应该提交新状态。我不确定您是否应该直接修改 filter$.value ?或者你通常应该有两个对象 - filter
(过滤器)和filter$
(可观察的过滤器),然后绝对不会filter$
直接改变,而是在每次发生更改时简单filter
地.next()
提交filter
?但这似乎是多余的,因为我们现在有两个对象,我们正在通过应用程序更改一个对象,并且必须通过附加各种事件处理程序来手动处理,而所有这些只是为了能够更新另一个对象 -filter$
. 这对我来说似乎太过分了。
谢谢。