按名称列出的清单-Angular 5 + Firebase

时间:2018-11-14 12:43:10

标签: list typescript firebase firebase-realtime-database angularfire2

我创建了一个服务,可以获取数据库的所有元素:

服务

 getElements() {
    return (this.eleList= this.firebase.list("elements"));
  }

组件

eleList: Element[];
getBets() {
    return this.databaseService
      .getElements()
      .snapshotChanges()
      .subscribe(item => {
        this.eleList= [];
        item.forEach(element => {
          let x = element.payload.toJSON();
          x["$key"] = element.key;
          this.eleList.push(x as Element);
        });
      });
  }

使用这两种方法,我要做的是将所有元素存储在this.eleList中。

我想创建一个名为filterByName(name)的新方法,在该方法中,我将this.eleList更新为一个仅包含对象中包含name的数组的数组,例如, this.eleList[1].name

我不知道Firebase是否提供缩短它的方法,或者我需要使用Javascript / Typescript。

1 个答案:

答案 0 :(得分:1)

Firebase充分利用了observables和async管道。

您应该利用它:

eleList$ = new Subject();

getElements() {
  this.this.firebase.list("elements")
    .pipe(take(1))
    .subscribe(list => this.eleList$.next(list));
}

getBets() {
  this.databaseService
    .getElements()
    .snapshotChanges()
    .pipe(
      map(item => items.map(element => ({
        ...element.payload.toJSON(),
        '$key': element.key
      })))
    )
    .subscribe(elements => this.eleList$.next(list));
}

现在要排序列表:

sortedList$ = this.eleList$.pipe(
  map(elements => elements.filter(element => !!element.name))
);