2016-08-03 28 views
1

Ich bin dabei fest: Meine Datenbank ist sehr einfach.angularfire2 in ionic2, Wie man mappt?

{ 
     "cities" : { 
     "A" : true, 
     "B" : true, 
     "C" : true, 
     }, 
     "productspercities" : { 
     "A" : { 
      "-KNnf89UzBvzmYlrpiQj" : true, 
      "-KNnfAs31LkMUjU60VAG" : true, 
      "-KNngYcNoUUql4oIMxwU" : true 
     }, 
     "B" : { 
      "-KO-wEN536BAx15ZpTO1" : true, 
      "-KO-xsw5Af1QNqTzDo2K" : true 
     }, 
     "C" : { 
      "-KNvvTEN5B0jbPLfOHxr" : true, 
      "-KO-v_WR8LSk4UfnGoYy" : true, 
      "-KO-viF1tOSp4JmpQxdi" : true 
     } 
     }, 
     "short_desc" : { 
     "-KNnf89UzBvzmYlrpiQj" : { 
      "desc" : "A nice flat in A" 
     }, 
     "-KNnfAs31LkMUjU60VAG" : { 
      "desc" : "A nice land in A" 
     }, 
     "-KNngYcNoUUql4oIMxwU" : { 
      "desc" : "A nice home in A" 
     }, 
     "-KNvvTEN5B0jbPLfOHxr" : { 
      "desc" : "A nice flat in C" 
     }, 
     "-KO-v_WR8LSk4UfnGoYy" : { 
      "desc" : "A nice land in C" 
     }, 
     "-KO-viF1tOSp4JmpQxdi" : { 
      "desc" : "A nice home in C" 
     }, 
     "-KO-wEN536BAx15ZpTO1" : { 
      "desc" : "A nice home in B" 
     }, 
     "-KO-xsw5Af1QNqTzDo2K" : { 
      "desc" : "A nice land in B" 
     } 
     } 
    } 

Sagen, ich nur die Produkte, für die Stadt A anzeigen möchten, so dass ich diese Funktion alle Refs der Produkte für diese Stadt zu bekommen:

this.productspercities = this.af.database.list('/productspercities/A') 

In diesem cas, kehren sie diese refs: -KNnf89UzBvzmYlrpiQj -KNnfAs31LkMUjU60VAG -KNngYcNoUUql4oIMxwU

wissen So, jetzt habe ich die Produkte haben diese refs zu zeigen. Aber wie bekommt man die Details dieser Produkte (short_desc)?

Ich versuchte dies:

getShortDesc(city) { 
     this.productspercities = this.af.database.list('/productspercities/'+city) 
     .map((productspercities) => { 
     return productspercities.map((ref) => 
     { 
      ref.shortdesc = this.af.database.list('/short_desc/${ref.$key}') 
     return ref; 
     }) 
     }) 

Die App baut korrekt ohne Vorwarnung, aber wenn ich versuche, mit dem Ergebnis in der Ansicht zu zeigen:

<ion-card *ngFor="let description of ref.shortdesc | async"> 
<ion-item> 
<h2>{{description.desc}}</h2> 
</ion-item> 
</ion-card> 

ich diesen Fehler:

ORIGINAL EXCEPTION: TypeError: undefined is not an object (evaluating 'self.parent.context.ref.shortdesc')

Ich brauche deine Hilfe!

Antwort

3

Die richtige Karte ist das .. Endlich fand ich die Lösung und hoffe, es wird jemand anderem helfen.

this.productspercities = this.af.database.list('/productspercities/'+city) 
     .map((items) => { console.log(items); 
     return items.map(item => { item.short_desc = this.af.database.object('/short_desc/'+item.$key); 
     return item; }); 
     }); 

Dann in der Ansicht:

<ion-card *ngFor="let item of productspercities | async"> 
<ion-item> 
<h2>{{(item.short_desc | async)?.desc}}</h2> 
</ion-item> 
</ion-card>