Angular 6 + RxJS 6.0:如何将新元素推送到 Observable 包含的数组

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

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

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

 this.homeWorkerService.eventSubject.next(calEvent);

在组件中,我有以下代码

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

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

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

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

PS : 我正在使用 this 库来呈现日历并使用 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

希望对您有所帮助!

除了 GeoAstronaute 的回答,下面是我如何从数组中删除内容:

  removeElementToObservableArray(idx) {
    this.array$.pipe(take(1)).subscribe(val => {
      const arr = this.subject.getValue()
      arr.splice(idx, 1)
      this.subject.next(arr)
    })
  }

I.E:您在 HTML 中的 ngforloop 可能有 let i = index,它将为您要删除的数据提供索引。其次,删除函数必须在 ngforloop 标签内:-)