代码之家  ›  专栏  ›  技术社区  ›  bellotas

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

  •  0
  • bellotas  · 技术社区  · 6 年前

    服务

     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) ,我将在其中更新 只包含 name 例如,在对象中, this.eleList[1].name

    1 回复  |  直到 6 年前
        1
  •  1
  •   user4676340 user4676340    6 年前

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