Список по имени - Angular 5 + Firebase - PullRequest
0 голосов
/ 14 ноября 2018

Я создал сервис, в котором я получаю все элементы своей базы данных:

Сервис

 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 /Машинопись для этого.

1 Ответ

0 голосов
/ 14 ноября 2018

Firebase в полной мере использует наблюдаемые и асинхронные каналы.

Вы должны воспользоваться этим:

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))
);
...