[英]Loop of JSON object with *ngFor (Angular 5)
I want to loop through an array of objects. 我想遍历对象数组。 but I could not do the loop to "purchases".
但我无法循环进行“购买”。 This is the result that I have by console:
这是我通过控制台获得的结果:
[{
"createdAt": "Fri Aug 31 2018 15:19:03 GMT-0400
(Eastern Daylight Time)
",
"customer": {
"address": "test",
"lastname": "Carrio",
"name": "Mabel",
"phone": "786222222"
},
"purchases": {
"0": {
"product": {
"categoryS": "-L9QdqynslyGy8Ft1G9z",
"location": "en tienda",
"name": "Memoria",
"price": 12
},
"quantity": 3
}
},
"totalPrice": 36,
"uid": "fr0Yix3T2hMio3KzwAB1r6aJbZA2",
"$key": "-LLGQAB3V_PRiW2v02bx"
}]
component.ts component.ts
ngOnInit() {
this.invoiceService.getInvoices().snapshotChanges().subscribe(data => {
this.invoiceList = []
data.forEach(element => {
let x = element.payload.toJSON()
this.invoiceList.push(x);
}
}
}
}
}
list.component.html list.component.html
<tr *ngFor="let invoice of invoiceList">
<td>{{invoice.customer.name}} {{invoice.customer.lastname}}</td>
<td>{{invoice.totalPrice}}</td>
<td>{{invoice.purchases.product.name}}</td>
<--- Error
</tr>
any idea? 任何想法?
Your component code needs refactoring. 您的组件代码需要重构。 Here's how you can refactor it:
重构方法如下:
// First
import 'rxjs/add/operator/map';
// Then
ngOnInit() {
this.invoiceService.getInvoices().snapshotChanges()
.map(data => data.map(datum => datum.payload.toJSON()))
.map(data => {
return data.map(datum => {
let purchases = [];
for (let key in datum.purchases) {
purchases.push(datum.purchases[key]);
}
datum.purchases = purchases;
return datum;
});
})
.subscribe(data => this.invoiceList = data);
}
Also, since doing something along the lines of Object.0
will throw an error, you should be using the Array member access pattern. 另外,由于沿
Object.0
的行进行Object.0
会引发错误,因此您应该使用Array成员访问模式。 Your template will have something like: 您的模板将具有以下内容:
<tr *ngFor="let invoice of invoiceList">
<td>{{invoice.customer.name}} {{invoice.customer.lastname}}</td>
<td>{{invoice.totalPrice}}</td>
<td>{{invoice.uid}}</td>
<td>{{invoice.createdAt}}</td>
<td>
<li class="list-group-item" *ngFor="let purchase of invoice.purchases">
{{purchase.product.name}}
</li>
</td>
<td>
<a class="btn btn-danger text-white" (click)="onDelete(invoice.$key)">
<i class="fas fa-trash-alt"></i>
</a>
</td>
</tr>
Here's the Updated StackBlitz . 这是更新的StackBlitz 。
Have Modified your code little bit. 稍微修改了您的代码。
<tr *ngFor="let invoice of invoiceList">
<td>{{invoice.customer.name}} {{invoice.customer.lastname}}</td>
<td>{{invoice.totalPrice}}</td>
<td>{{invoice.purchases["0"].product.name}}</td> //Changes are here
If key of an Object is a number, you have to access it like [0] or ["0"] 如果对象的键是数字,则必须像[0]或[“ 0”]一样访问它
Hope That Helped!! 希望能有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.