如何在Angular 2中使用* ngFor迭代
我想在Angular 2中使用* ngFor迭代[object object]。
问题是对象不是对象的数组,而是包含更多对象的对象的对象。
{ <-- this is an array of object "data": { "id": 834, "first_name": "GS", "last_name": "Shahid", "phone": "03215110224", "role": null, "email": "test@example.com", "picture": **{ <-- I want to get thumb: url but not able to fetch that** "url": null, "thumb": { "url": null } }, "address": "Nishtar Colony", "city_id": 2, "provider": "email", "uid": "test@example.com" } }
我知道我们可以使用pipe道迭代对象,但是我们如何从对象迭代到对象意味着data-> picture-> thum:url 。
您可以使用pipe道
@Pipe({ name: 'keys', pure: false }) export class KeysPipe implements PipeTransform { transform(value: any, args: any[] = null): any { return Object.keys(value)//.map(key => value[key]); } }
<div *ngFor="let key of objs | keys">
另请参见如何使用* ngFor与对象?
您必须创build自定义pipe道。
import { Injectable, Pipe } from '@angular/core'; @Pipe({ name: 'keyobject' }) @Injectable() export class Keyobject { transform(value, args:string[]):any { let keys = []; for (let key in value) { keys.push({key: key, value: value[key]}); } return keys; }}
然后在你的* ngFor中使用它
*ngFor="let item of data | keyobject"
我认为最优雅的方法是使用JavaScript Object.keys,如下所示:
在组件传递对象到模板:
Object = Object;
然后在模板中:
<div *ngFor="let key of Object.keys(objs)"> my key: {{key}} my object {{objs[key] | json}} <!-- hier I could use ngFor again with Object.keys(objs[key]) --> </div>
如果你在你的响应中使用map()
运算符,你可以链接一个toArray()
运算符…然后你应该可以遍历新创build的数组…至less对我有用:)
我会这样做:
<li *ngFor="let item of data" (click)='onclick(item)'>{{item.picture.url}}</li>