2017-05-29 109 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