Angular 6 + RxJS 6.0 : How to push new element to array contained by Observable

标签 angular rxjs observable subject

我正在从 firebase 服务器分块接收数据,同时渲染该数据需要一个库,该库坚持 observable 包含数组。我无法将新数据 block 推送到 observable 包含的现有数据 block 数组,

从数据服务我通过主题的下一个调用并尝试添加一个新的 calEvent

 this.homeWorkerService.eventSubject.next(calEvent);

在组件中,我有以下代码

events$: Observable<Array<CalendarEvent<any>>>;

和 ngOnInit,我正在向它提供数据

this.events$ = this.service.eventSubject.asObservable();

您能否建议我可以向已保存我的事件的可观察对象添加新事件的任何方法。

PS:我正在使用 this lib 来渲染日历并使用 remoteDB 来渲染事件。

谢谢,

最佳答案

这里的主题是一个 CalendarEvent 数组,你必须在 next() 方法中传递一个 CalendarEvent 数组。我建议在您的案例中使用 BehaviorSubject。这是一个简短的例子:

import { Component } from '@angular/core';
import { Observable, BehaviorSubject, of } from 'rxjs';
import { take } from 'rxjs/operators';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  obsArray: BehaviorSubject<any[]> = new BehaviorSubject<any[]>([]);
  array$: Observable<any> =  this.obsArray.asObservable();

  constructor() {
  }

  ngOnInit() {
    this.addElementToObservableArray('It works');
  }

  addElementToObservableArray(item) {
    this.array$.pipe(take(1)).subscribe(val => {
      console.log(val)
      const newArr = [...val, item];
      this.obsArray.next(newArr);
    })
  }
}

你可以在这里看到一个活生生的例子:Stackblitz .

希望对您有所帮助!

关于 Angular 6 + RxJS 6.0 : How to push new element to array contained by Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50856647/

相关文章:

angular - Ionic 4 Angular 8-未捕获的ReferenceError : global is not defined

angular - 从组件手动将服务注入(inject)到指令中

Angular 2.2 和 SystemJS : deploy RXJS

javascript - Angular 和 Observable : how to avoid multiple requests to API within a given time

javascript - 结合两个平行的可观察量

javascript - 如何为我的 ng2-charts 条形图添加标题

javascript - ionic /Angular 等待服务准备好

javascript - Angular 2 ES6/7 Eventemitter 更新其他组件

angular - “错误”消息 : 'Property ' from' does not exist on type 'typeof Observable'

angular - 用作 PartialObserver 的 BehaviorSubject 打破了对 BehaviorSubject 的订阅