AngularFire-将来自Firestore集合查询的数据推入数组

时间:2018-12-11 10:19:55

标签: angular google-cloud-firestore angularfire5

我正在查询Firestore集合,成功检索了结果。但是,我使用的是需要数组进行排序的可排序角度插件。

我遇到的问题是将项目推入数组,但是当有新项目进入时,我找不到正确的位置来清除数组。如果不清除数组,返回的结果将在数组中重复。

有人可以帮助重构下面的代码,以便我成功地将收集结果推入数组并在正确的位置清除它吗?

...
itemsArray = []
...

getData(){
    this.issueCollection = this.afs.collection<any>(`users/${user}/projects/${project}/issues`, ref => {
      return ref.orderBy('order');
    });
    this.issues = this.issueCollection.snapshotChanges().pipe(
      map(actions => actions.map(a => {
        const data = a.payload.doc.data();
        const id = a.payload.doc.id;

        this.itemsArray.push({ id, ...data });

        return { id, ...data };
      }))
    );
  }

HTML -我如何需要HTML来显示结果

<ul>
   <li *ngFor="let issue of itemsArr">
      {{ issue.issueName }}
   </li>
</ul>

更新-这似乎可行

  getData(){
    this.issueCollection = this.afs.collection<any[]>(`users/${user}/projects/${project}/issues`, ref => {
      return ref.orderBy('issue_order');
    });
    this.issues = this.issueCollection.snapshotChanges().pipe(
      map(actions => {
      this.itemsArr = [];
      return actions.map(a => {

        const data = a.payload.doc.data();
        const id = a.payload.doc.id;


        this.itemsArr.push({ id, ...data });


        return { id, ...data };
      });
    }))
  }

1 个答案:

答案 0 :(得分:0)

我要做的是让它订阅集合并执行以下操作:

getData(){
    this.issueCollection = this.afs.collection<any[]>(`users/${user}/projects/${project}/issues`, ref => {
      return ref.orderBy('order');
    });
    this.issues = this.issueCollection.snapshotChanges().pipe(
      map(actions => actions.map(a => {
            const data = a.payload.doc.data();
            const id = a.payload.doc.id;

            return { id, ...data };
        }))).subscribe((items: any[]) => {
          this.itemsArray = [];
          this.itemsArray = items;
       });
  }

这将使您清空itemsArray并重新填充。而不是只推送数组并且永远不要清空数组。