0

I have object:

messages = [{
    'One' : [
        {'id' : 1},
        {'id' : 2},
    ],
    'Two' : [
        {'id' : 1},
        {'id' : 2},
    ]
}] ;

I have tried the below code but did't run please tell me where i am doing wrong.

<div *ngFor="let message of messages">
    <div>KEY</div>
    <div *ngFor="let value of message">VALUE</div>
</div>

In code i need show KEY and VALUE

My Solution

In component:

this.messages = data['messages'] ;
this.keys = Object.keys(data['messages']);

In view:

<div *ngFor="let key of keys">
    <div>{{key}}</div>
    <div *ngFor="let message of messages[key]">{{message['id']}}</div>
</div>
1
  • NgFor only supports binding to Iterables such as Arrays Commented Jul 31, 2017 at 15:03

2 Answers 2

1

If you dont want to create a pipe you can expose Object.keys like in this SO-answer.

Your component:

@Component({
    ...
})
export class YourComponent{
    objectKeys: any = Object.keys;
    messages: Array<any>;

    constructor(){}

    ...
}

HTML:

<div *ngFor="let message of messages">
    <div *ngFor="let key of objectKeys(message)">
        <div>KEY: {{ key }}</div>
        <div *ngFor="let val of message[key]">{{ val.id }}</div>
    </div>
</div>

OUTPUT:

KEY: One
1
2
KEY: Two
1
2
Sign up to request clarification or add additional context in comments.

Comments

-1

You can use a pipe like shown in How to iterate [object object] using *ngFor in Angular 2

<div *ngFor="let message of messages">
    <div>KEY</div>
    <div *ngFor="let key of message | keys">{{message[key]}}</div>
</div>

1 Comment

you're right, im sorry. i was probably blacking out

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.