如何将项目附加到Observable

时间:2016-11-21 11:37:08

标签: angular rxjs

如何将商品附加到Observable

这是一些代码:

 this.logEntries = this.controllerService.getLog(this.controller.remoteID, this.skip, this.max);

        this.logEntries.subscribe(a => {
            this.allLogEntries.add(this.logEntries)
        });

这是他们的声明:

 logEntries: Observable<Log[]>;
    allLogEntries: Observable<Log[]> = Observable.empty<Log[]>();

我想将项目附加到allLogEntries,因为它们是从Web服务获取的。我该怎么做?

3 个答案:

答案 0 :(得分:7)

也许scan运营商可能会对您感兴趣。这是一个示例:

obs.startWith([])
 .scan((acc,value) => acc.concat(value))
 .subscribe((data) => {
   console.log(data);
 });

有关详细信息,请参阅此问题:

答案 1 :(得分:2)

如果您想要将两个可观察对象连接在一起,则需要例如combineLatest

Observable
  .combineLatest(this.logEntries, this.allLogEntries)
  .subscribe(...);

这使您可以访问每个observable的最新值,并在其中任何一个更改时更新,并且您可以根据需要组合它们。

如果您希望能够手动将条目推送到其中一个源可观察对象,请将其设为Subject

this.logEntries = new Subject();
Observable
  .combineLatest(this.logEntries, this.allLogEntries)
  .subscribe(...);

然后您可以使用以下命令调用更新:

this.logEntries.next(...);

您的订阅将收到新的logEntries以及最新的allLogEntries。根据您的行为,您可以使用ReplaySubjectBehaviourSubject代替香草Subject

答案 2 :(得分:2)

看看BehaviorSubject

它是Observable,您可以在其中将新项目推送为包含对象。