Reputation: 572
I have an object that will be dynamically changed when the server pushes new data, my object is like that:
rooms: [
{name: 'room1', users:
[
{id: 1, name: 'user1'},
{id: 2, name: 'user2'}
],
name: 'room2', users:
[
{id: 3, name: 'user3'},
{id: 4, name: 'user4'}
]
}]
and i need to generate this
<rooms>
<room>
<user>User1</user>
<user>User2</user>
</room>
<room>
<user>User3</user>
<user>User4</user>
</room>
</rooms>
I cant understand how a top component can pass the objets to the sub components with users and batabind on changed elements (rooms and users from websocket) externally in @component and class, i'm trying to do something like that:
<rooms>
<room *ngFor='room in rooms'>
<user *ngFor='users in users'>
Upvotes: 0
Views: 101
Reputation: 4189
In your case, you should have at least 3 components. A rooms
, room
, user
.
In your rooms
component, your template may look like this:
<h1>rooms</h1>
<div *ngFor="let room of rooms">
<room [data]="room"></room>
</div>
Then in your room
component, your template may look like this:
<div>
<h1>Room: {{ room.name }}</h1>
<div *ngFor="let user of room.users">
<user [data]="user"></user>
</div>
</div>
In this example, your room
component is expecting an @Input
, like this:
export class RoomComponent {
@Input('data')
room: any;
}
Lastly, your user
component may look like this
<div>
{{ user.name }}
</div>
With class like this:
export class UserComponent {
@Input('data')
user: any;
}
Probably you can take a look at this tutorial: https://scotch.io/tutorials/3-ways-to-pass-async-data-to-angular-2-child-components
Upvotes: 0
Reputation: 43
Maybe you can try @ViewChild to get the data and @Input() to pass it.
Upvotes: 0
Reputation: 41533
Use the below code.
Your json has to be modified as
rooms:any[]= [
{name: 'room1', users:
[ {id: 1, name: 'user1'},
{id: 2, name: 'user2'}
]},
{name: 'room2', users:
[ {id: 3, name: 'user3'},
{id: 4, name: 'user4'}
]
}];
HTML will look like
<div>
<h2>Hello {{name}}</h2>
<div *ngFor="let room of rooms">
{{room.name}}
<div *ngFor="let user of room.users">
ID : {{user.id}} <br/>
Name: {{user.name}}
</div>
</div>
</div>
Upvotes: 1