2017-02-20 6 views
0

I mit ionischen 2 und Winkel 2. Im Moment arbeite ich habe zwei Observablen, die Objekt-Arrays enthalten und zu meiner Vorlage übergeben werden angezeigt werden:RxJS/Schräg: Wie beobachtbaren Arrays von Objekten zip

users: Observable<User[]>; scores: Observable<Score[]>;

In meiner Vorlage muss ich sie zur Zeit getrennt angezeigt werden: jedoch

<ion-card *ngFor="let score of scores | async" > 
    <ion-item text-wrap>{{ score.total }} </ion-item> 
</ion-card> 

<ion-card *ngFor="let user of users | async" (click)="goToPlayer(user, league)"> 
<ion-item text-wrap>{{ user.id }}</ion-item> 
</ion-card> 

, würde ich diese Werte in der Lage sein mögen zusammen anzuzeigen, user.id und score.total, auf der gleichen Linie. Derzeit werden alle Bewertungen und dann alle Benutzer-IDs angezeigt. Die Observable-Arrays enthalten immer die gleiche Anzahl von Elementen.

Die Modelle für User und Score sind:

export interface User { 
id?: string, 
email?: string, 
leagues?: any[], 
dateCreated: Date 
}; 

export interface Score { 
scores: any[], 
total: number 
}; 

Mit Probe Postleitzahl von Aravind Antwort:

this.users = this.userData.loadUsers(this.league.id); 
this.scores = this.leagueData.loadPlaylistScores(this.league.id); 

Observable 
.zip(this.users, 
    this.scores, 
    (id: number, total: number) => ({ id, total })) 
.subscribe(x => console.log(x)); 

druckt drei Objekte an die Konsole, die die richtige Anzahl der Objekte ist. Jedoch jedes Objekt ist {id: Array [0], gesamt: Array [0]}

+0

aktualisieren Sie Ihren Beitrag mit relevanten Beispiel JSON und Observable Code – Aravind

+0

Sounds eher wie ein Problem mit wie zip verwendet wurde als alles, da zip für diesen Fall gemacht wird. – Namirna

+0

@Namirna zip wird für Eigenschaften in einem Observable verwendet, daher sucht das OP nach diesem Format ** {id: 1, score: 200} **, um in diesem Format zu extrahieren. Sehen Sie sich meine Antwort unter – Aravind

Antwort

1

Raten Sie das unten Code hilft Ihnen

Observable 
    .zip(users 
     scores, 
     (id: number, total: number) => ({ id, total })) 
    .subscribe(x => console.log(x)); 

Hinweis: Wenn dies nicht funktioniert, benötigt, um Ihre Probe json aussehen für bestimmte Eigenschaften. Basierend auf dem kann ich aktualisieren

+0

Dies gibt den Fehler zurück: Kann die Eigenschaft 'Symbol (Symbol.iterator)' von undefined nicht lesen. Ich habe die Frage mit den Modellen aktualisiert. – jstrout

+0

wie ich in der ** Note ** update Ihre JSON – Aravind

+0

Die Daten werden aus einer Firebase-DB gezogen und dann über eine Reihe von Funktionen auf diese Modelle abgebildet, so dass ich nicht sicher bin, wie Sie den JSON zeigen. Ich habe den Fehler gefunden, der den 'Symbol (Symbol.iterator) Fehler verursacht hat, da ich gelegentlich die Observablen übergeben habe, bevor sie gefüllt wurden. Nun erzeugt der obige Code ein Observable <{id: string; Gesamtzahl; }> was nicht iterierbar ist und einen Fehler erzeugt: "Kann kein anderes unterstützendes Objekt '[Objekt Objekt]' vom Typ 'Objekt' finden. NgFor unterstützt nur die Bindung an Iterables wie Arrays." wenn versucht wird, in der Vorlage anzuzeigen. – jstrout

Verwandte Themen