2017-05-29 89 views
0

我有以下火力地堡數據庫結構:AngularFire2遍歷對象的數組

orders { 
    $uid { // user UID 
    order { 
    // ... 
    } 
    } 
} 

而我試圖讓所有的訂單,這種方式:

public getOrders() { 
    this.db.list('/orders).subscribe(items => { 
    items.forEach(item => { 
     console.log(item); 
    }) 
    }) 
} 

items

我問題是,我如何獲得所有訂單? 因爲現在,我無法遍歷item

+0

例如,如果我想要做'items [0] .length'輸出是'undefined' – DDE

+0

當然,因爲只有'items'是一個'Array',但它的子對象是'Objects'沒有'.length'屬性。 – Marian07

+0

你有權利,我試圖將每個對象轉換爲數組,但不成功:( – DDE

回答

0

好了,終於我可以通過以下方式解決這個問題:

public getOrders() { 
    this.db.list('/orders).subscribe(items => { 
    items.forEach(item => { 
     Object.keys(item).map(key=>item[key]).map(order => { 
     console.log(order); 
     }) 
    }) 
    }) 
} 

所以,我們首先讓所有的訂單,然後循環使用forEach通過與訂單的每個對象。然後,使用Object.keys我們可以訪問每個用戶的訂單。

0

您可以將Firebase Database中的結果(items)保存在variable以及之後,在Angular模板(HTML)中使用該變量。

火力地堡DB: /命令/

[{ 
    "userId1": { 
     "name": "Michael", 
     "value": "55$" 
    } 
    }, 
    { 
    "userId1": { 
     "name": "Michael", 
     "value": "55$" 
    } 
    } 
] 

組件的邏輯

databaseOrders; 
public getOrders() { 
    this.db.list('/orders).subscribe(items => { 
    this.databaseOrders = items; 
    }) 
} 


組件模板

<div *ngIf="databaseOrders" class="orders"> 
    <article *ngFor="let order of databaseOrders; let i = index"> 
    <span class="ordered-by">{{order[i].name}}<span> 
    <b class="order-value">{{order[i].value}}</b> 
    </article> 
</div> 
+0

謝謝@ Marian07,這很有用,但在這種情況下,我的意圖是計算訂單和每個訂單的財產訪問。我如何訪問每個訂單? – DDE

+0

查看AngularFire2'列表':https://github.com/angular/angularfire2/blob/master/docs/3-retrieving-data-as-lists.md – Marian07