在我的角度应用程序中,我使用ngxs
库作为商店。
我有获取last edited id
的方法:
return this.store.select((state: AppStateModel) => state.lastEditedId)
.pipe(filter(id => id > 0));
我将其用于更改表单中的选项。像这样:
this._options$ = merge(
/**
* Init value from query param
*/
initValue$.pipe(tap(i => console.log('initValue$', i)), take(1)),
/**
* Last edited id
* Here I want only newly emitted values, but I also get old one.
*/
this.obiektySelectors.lastEditedId()
.pipe(
tap(i => console.log('lastEditedId', i)),
distinctUntilChanged(),
),
);
问题是,当我在lastEditedId
中有价值时,它总是进入this._options$
流中。我知道它没有发出。
我可以强制观测器仅采用发射的值吗?
答案 0 :(得分:1)
我想到的唯一想法是创建单独的主题,该主题将订阅lastEditedId()
并重新发送ID。
const idChanges = new Subject();
this.obiektySelectors.lastEditedId().subscribe(id => idChanges.next(id));
然后,您可以在合并中使用此主题。由于Subject
不存储最后一个值,因此它将仅发出新的ID。
this._options$ = merge(
/* ... */
idChanges
.pipe(
tap(i => console.log('lastEditedId', i)),
distinctUntilChanged(),
),
);