2017-01-08 3 views
0

Ich habe ein Objekt, das dynamisch geändert werden, wenn der Server neue Daten schiebt, mein Objekt, wie das ist:Angular2 wie man Databind js Objekt

rooms: [ 
{name: 'room1', users: 
    [ 
     {id: 1, name: 'user1'}, 
     {id: 2, name: 'user2'} 
    ], 
name: 'room2', users: 
    [ 
     {id: 3, name: 'user3'}, 
     {id: 4, name: 'user4'} 
    ] 
}] 

und ich brauche diesen

<rooms> 
    <room> 
     <user>User1</user> 
     <user>User2</user> 
    </room> 

    <room> 
     <user>User3</user> 
     <user>User4</user> 
    </room> 
</rooms> 
zu erzeugen

Ich kann nicht verstehen, wie eine Top-Komponente die Objekte an die Sub-Komponenten mit Benutzern und batind auf geänderte Elemente (Räume und Benutzer von WebSocket) extern in @Komponente und Klasse übergeben kann, ich versuche, so etwas zu tun:

<rooms> 
    <room *ngFor='room in rooms'> 
     <user *ngFor='users in users'> 
+1

Sie sollten nur deinen Arsch Array von Räumen als Eingabe für Ihre Komponente. Diese Komponente würde jeden Raum als Eingabe an die Komponente übergeben. Und diese Komponente würde jeden Benutzer des Raums an die Komponente übergeben. Ohne Code ist es schwer zu verstehen, was Sie nicht verstehen. Beachten Sie, dass Ihr Zimmer-Array falsch ist: Es hat ein einzelnes Objekt statt zwei, wobei alle seine Attribute wiederholt werden. –

+0

Wie kann ich dieses Objekt dynamisch durch ein externes Ereignis ändern? Ich meine ... Die andere Klasse mit dem Websocket oder HTTP-Pooling erhält einen neuen verbundenen Benutzer und aktualisiert das Objekt mit Datenbindung zu DOM? Vielen Dank. –

Antwort

1

Verwenden Sie den folgenden Code.

Ihre json muss modifiziert werden, wie

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 wie

<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> 
aussehen

Live Demo

0

Vielleicht können Sie versuchen, @ViewChild die Daten zu erhalten und @Input() zu übergeben es.

0

In Ihrem Fall sollten Sie mindestens 3 Komponenten haben. A rooms, room, user.

In Ihrem rooms Komponente, die Vorlage wie folgt aussehen:

<h1>rooms</h1> 
<div *ngFor="let room of rooms"> 
    <room [data]="room"></room> 
</div> 

Dann in Ihrem room Komponente, die Vorlage wie folgt aussehen:

<div> 
    <h1>Room: {{ room.name }}</h1> 
    <div *ngFor="let user of room.users"> 
     <user [data]="user"></user> 
    </div> 
</div> 

In diesem Beispiel Ihre room Komponente erwartet eine @Input, so:

export class RoomComponent { 
    @Input('data') 
    room: any; 
} 

Schließlich Ihre user Komponente wie diese wie folgt

<div> 
    {{ user.name }} 
</div> 

Mit Klasse aussehen:

export class UserComponent { 
    @Input('data') 
    user: any; 
} 

Wahrscheinlich Sie einen Blick auf dieses Tutorial nehmen: https://scotch.io/tutorials/3-ways-to-pass-async-data-to-angular-2-child-components

+0

Ich muss hinzufügen oder entfernen Benutzer, wenn sie verbinden und trennen, kann ich das mit einer anderen Klasse mit Verbindung, die drücken oder splice die Clients dann an diese Steuerelemente Databind tun –