2017-10-21 151 views
3

比方說,你有以下結構:從公司的FireStore返回嵌套的集合作爲對象angularfire2和火力

shopping-carts (collection) 
- shopping-cart 1(doc) 
    -- dateCreated (field) 
    -- items (collection) 
- shopping-cart 2(doc 
    -- dateCreated 
    -- items 
. 
. 
. 

那麼,我們將如何去讓整個購物推車(DOC)作爲我的購物對象我們定義爲

export interface ShoppingCart { 
    items: ShoppingCartItem[] 
    dateCreated: string 
} 

afs.doc('shopping-cart/id').valueChanges()只返回dateCreated會

afs.doc('shopping-cart/id').collection('items').valueChanges()返回的項目。

簡單的方法讓所有人都成爲一個對象並將其創建爲對象?

回答

0

可能不是最好的解決方案,但還找不到更好的解決方案。

this.shoppingCartsCollection = afs.collection<Servicio>('shopping-carts', 
     ref => ref.orderBy('dateCreated', 'asc')); 

this.shoppingCarts = this.shoppingCartsCollection 
    .snapshotChanges() 
    .map(values => { 
     return values.map(value => { 

      const shopping-cart = value.payload.doc.data(); 
      const itemsArray = shopping-cart.items; 
      shopping-cart.observableItems = []; 

      for (var i = 0, len = itemsArray.length; i < len; i++) { 
      itemDocRef = itemsArray[i]; 
      value.observableItems.push(afs.doc('items/'+ itemDocRef.id).valueChanges()); 
      } 

      return shopping-cart; 
     }); 
    }); 

訪問你的項目的數據,像任何其他可觀察

<div *ngFor="let shoppingCart of shoppingCarts | async"> 
    <p *ngFor="let observableItem of shoppingCart.observableItems"> 
     {{(observableItem | async)?.displayName}} 
    </p> 
</div> 
+0

我其實是在同樣的情況。唯一不適合我的其他事情是我實際上沒有收到物品收藏。 –