2017-05-25 3 views
2

Je travaille sur un projet Angular et j'ai suivi un tutoriel pour obtenir des données de la base de données Firebase.Angular/Firebase - Renvoyer la clé et la valeur de Firebase

Voici le code qui obtient les valeurs

<ul> 
<li class="text" *ngFor="let item of items | async"> 
    {{item.$value}} 
</li> 
</ul> 

Ma question est ... Je reçois les valeurs mais je veux obtenir les noms trop (ou les touches, si c'est le nom).

Par exemple, les données se présente comme suit:

items 
name: car, 
value: ford 

Ce code:

<ul> 
    <li class="text" *ngFor="let item of items | async"> 
    {{item.$value}} 
    </li> 
</ul> 

Et le code JS:

export class AppComponent { 
    items: FirebaseListObservable<any[]>; 
    snippets: FirebaseListObservable<any[]>; 
    constructor(db: AngularFireDatabase) { 
    this.items = db.list('/items'); 
    } 
} 

ne retourneront la valeur.

Comment puis-je obtenir à la fois

Répondre

2

si vous utilisez la bibliothèque angularfire2 juste passer le paramètre preserveSnapshot

import { Component} from '@angular/core'; 
import { AngularFireDatabase} from 'angularfire2/database'; 

@Component({ 
    selector: 'app-root', 
    template: ` 
    <h1>{{key | async}}</h1> 
    <h1>{{value | async}}</h1> 
    ` 
}) 
export class AppComponent { 
    key: any; 
    value: any; 
    constructor(db: AngularFireDatabase) { 
    this.items = db.list('/items', { preserveSnapshot: true }); 
    this.items 
     .subscribe(snapshots => { 
     snapshots.forEach(snapshot => { 
      this.key = snapshot.key; 
      this.value = snapshot.val() 
     }); 
     })} 

} 

pour plus d'informations, visitez les documents officiels here

+0

Voici le code actuel: export class AppComponent { articles: FirebaseListObservable ; extraits: FirebaseListObservable ; constructeur (db: AngularFireDatabase) { this.items = db.list ('/ items'); } } – dj2017

+0

@ dj2017 J'ai édité ma réponse pour la rendre plus claire pour vous, j'ai donc écrit le composant complet pour mieux le comprendre –