创建可观察流 - Subject和Observable之间的交互

时间:2018-06-14 15:34:52

标签: angular rxjs observable

每当我们想要将一些值泵入可观察流时,我们经常使用这样的模式:

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()可观察的发射?

1 个答案:

答案 0 :(得分:0)

如果您想在这种情况下删除主题,可以直接使用scrollRx.fromEvent事件创建一个observable。我不熟悉角度组件,但基本上这就是你需要做的事情:

const scroll$ = Rx.fromEvent(elementBeingScrolled, 'scroll')
const load$ = Rx.combineLatest(scroll$, this.limit$)

此外,我对于为什么您需要从scroll$limit$发出的值犹豫不决。 scroll$在您上面的示例中发出空值,但我不知道limit$会发生什么。如果您不需要这些值,则可以省略行(limit, trigger) => ({ limit, trigger }),它只控制将哪些值传递给流的其余部分。