我有一个侧边栏,当您对其进行更改时,我需要订阅这些更改并对它们做出反应,因此我们正在使用主题。
问题是我们不知道主题的最佳架构,应该是发出单个字符串还是对象?
如果我们将所有更改的对象作为key:value对发出,那么我们如何仅在其他位置订阅这些更改之一,而不是对整个对象做出反应?
我想使每次更改都避免由Subject发射器污染我的代码,或者这是“最佳实践”
当前实施示例
发射器
/**
* A function that emits an RXJS event to any observers subscribed to this subjet
* when the user changes the calendar in the sidebar.
* @return {Observable} An Observable that, whenever subscribed, will execute the
* specified function.
* @static false
*/
public emitCalendar = (calendar: any): void => {
this.selectedCalendar = calendar;
this.onChangeLeftPane$.next({ calendar: calendar });
};
然后,仅订阅的最佳方法是什么
onChangeLeftPane$.calendar
答案 0 :(得分:0)
设置一个单独的Observable,以使用filter
运算符收听更改
this.onChangeCalendar=this.onChangeLeftPane$.asObservable()
.pipe(filter(obj=>Objects.keys(obj).includes('calendar'))
this.onChangeLeftPane$.next({ calendar: calendar });
答案 1 :(得分:0)
您可以使用pluck
仅从对象中获取calendar
,然后在必要时添加filter
(这样,如果{{1 }}丢失)和/或distinctUntilChanged
(这样就不会发出相同的值,如果它没有变化的话)。
undefined