Получить данные из объекта AngularFirestoreCollection

Я разрабатываю приложение на Ionic 3 с Cloud Firestore. Я застрял в том, как извлечь значение из снимка, полученного из коллекции 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)
}

В настоящее время это бросает следующее

Типографская ошибка Свойство 'Price' не существует для типа '{}'.

Моя цель - рассчитать общую цену по всем документам в коллекции. Даже в противном случае я не уверен, как получить доступ к данным, возвращенным return (id,...data)

функция quoteprovider определяется следующим образом

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

Есть ли альтернативный способ использовать более простой метод valueChanges() вместо snapshotChanges() для доступа к полученным данным? Спасибо

1 ответ

Решение

Из того, что я вижу,

this.qd является наблюдаемой, которая будет возвращать массив Quotations после картирования.

Вам нужно использовать map а также reduce на массиве после карты на наблюдаемой.

Так что ваше последнее возвращение будет выглядеть так:

 return this.qd.map(quotations=>
               quotations.map(res=>res.Price)
               .reduce((tot,price)=>tot+price,0));
Другие вопросы по тегам