从AngularFirestoreCollection对象

时间:2018-01-09 06:10:47

标签: angularjs ionic3 angularfire2 google-cloud-firestore

我正在使用Cloud Firestore在Ionic 3上开发一个应用程序。我坚持如何检索从angularfirestorecollection检索的快照中的值。我使用以下函数来访问和处理数据。但我无法理解如何在qd对象中获取单个元素值

getQuoteTotal(status:string){
            this.qd=this.quoteprovider
                    .getQuoteList(status)
                    .snapshotChanges()
                     .map(actions => {
             return actions.map(a => {
   const data = a.payload.doc.data() as Quotation;
  const id = a.payload.doc.id;
   return { id, ...data }; // <-- how to access this data in rest of the function?
       })
     })
       return Array.from(this.qd)
               .map(res=>res.Price)
               .reduce((tot,price)=>tot+price,0)
}

目前,这会抛出以下内容

打字稿错误 物业&#39;价格&#39;类型&#39; {}&#39;。

上不存在

我的目标是计算集合中所有文档的总价格。即便如此,我也不确定如何访问返回的数据 return(id,... data)

quoteprovider函数定义如下

getQuoteList(status:string): AngularFirestoreCollection<Quotation> {
return this.fireStore.collection<Quotation>(
  '/QuoteList',
  clause => clause.where('qStatus','==',status)
)}

是否有另一种方法可以使用更简单的valueChanges()而不是snapshotChanges()来访问检索到的数据? 感谢

1 个答案:

答案 0 :(得分:0)

从我看到的,

this.qd是一个Observable,它将在映射后返回Quotations数组。

在observable上映射后,您需要在数组上使用mapreduce

所以你的最后一次回归看起来像是:

 return this.qd.map(quotations=>
               quotations.map(res=>res.Price)
               .reduce((tot,price)=>tot+price,0));