2017-01-03 12 views
1

genannt habe ich die folgende Datenstruktur in meiner firebase Datenbank:Auto Return-IDs generiert, wenn child_added Zuhörer

enter image description here

ich eine child_added Methode hinzugefügt haben, die alle Einträge aus firebase zurückgibt, wenn die Anwendung ausführen und zeigt sie dann auf einer HTML Tabelle an.

Problem, das ich habe ist, es gibt nicht die automatisch generierten IDs für jeden Fehler zurück.

Dies ist meine Methode:

getAddedBugs(): Observable<any> { 
    return Observable.create(obs => { 
     this.bugsDbRef.on('child_added', bug => { 
      const newBug = bug.val() as Bug; 
      obs.next(newBug); 
     }, 
      err => { 
       obs.throw(err) 
      }); 
    }); 
} 

Die classBug wie folgt aussieht:

export class Bug { 
constructor(
    public id: string, 
    public title: string, 
    public description: string, 
    public status: number, 
    public severity: number, 
    public createdBy: string, 
    public createdDate: number, 
    public updatedBy?: string, 
    public updatedDate?: number 
) {} 
} 

Also Frage ist, wie kann ich meine Methode erhalten auch enthalten die automatisch generierten IDs, wie Ich brauche diese ID zum Aktualisieren/Löschen usw.

Ich habe dies gegooglet und leider konnte ich nichts dazu finden.

Kann jemand etwas Licht in das, was ich darüber mache, werfen?

Antwort

2

Anstatt der Veranstaltung Snapshots Wert auf ein Bug Gießen (es ist kein Bug, es ist nur ein Object), sollten Sie eine Bug Instanz mit Hilfe der Informationen aus dem Snapshot zu erstellen. Der Snapshot enthält den Schlüssel (die automatisch generierten ID) und den Wert:

getAddedBugs(): Observable<any> { 
    return Observable.create(obs => { 
    this.bugsDbRef.on('child_added', 
     snapshot => { 
     // The snapshot's value will be an Object, not a Bug instance. 
     const val = snapshot.val(); 
     const bug = new Bug(
      snapshot.key, // The auto generated ID. 
      val.title, 
      val.description, 
      ... etc. 
     ); 
     obs.next(bug); 
     }, 
     err => { 
     obs.throw(err) 
     }); 
    }); 
} 

Sie sollten auch eine Funktion betrachten Rückkehr, die die Ereignis-Listener auf Abmelde entfernt:

getAddedBugs(): Observable<any> { 
    return Observable.create(obs => { 
    const listener = snapshot => { 
     const val = snapshot.val(); 
     const bug = new Bug(
     snapshot.key, 
     val.title, 
     val.description, 
     ... etc. 
    ); 
     obs.next(bug); 
    } 
    this.bugsDbRef.on('child_added', listener, err => { obs.throw(err) }); 
    return() => this.bugsDbRef.off('child_added', listener); 
    }); 
} 
Verwandte Themen