每当我们想要将一些值泵入可观察流时,我们经常使用这样的模式:
private readonly loadTriggerSubject = new Subject<any>();
private readonly loadTrigger$ = this.loadTriggerSubject.pipe(
// operators
);
onScroll() {
this.loadTriggerSubject.next();
}
然后在同一个组件中我们可以使用$loadTrigger$
的输出流,例如:
private readonly load$ = combineLatest(
this.limit$,
this.loadTrigger$,
(limit, trigger) => ({ limit, trigger }),
).pipe(
// operators
);
onScroll()
基本上触发整个机器,但感觉有太多的样板。有没有办法省略显式地将observable与其主题分开以简化上面的代码,但是当loadTrigger$
被触发时仍然有onScroll()
可观察的发射?
答案 0 :(得分:0)
如果您想在这种情况下删除主题,可以直接使用scroll
从Rx.fromEvent
事件创建一个observable。我不熟悉角度组件,但基本上这就是你需要做的事情:
const scroll$ = Rx.fromEvent(elementBeingScrolled, 'scroll')
const load$ = Rx.combineLatest(scroll$, this.limit$)
此外,我对于为什么您需要从scroll$
或limit$
发出的值犹豫不决。 scroll$
在您上面的示例中发出空值,但我不知道limit$
会发生什么。如果您不需要这些值,则可以省略行(limit, trigger) => ({ limit, trigger })
,它只控制将哪些值传递给流的其余部分。