1

sorry für mein Englisch, ich habe diese beobachtbar:Extrahieren von Daten aus FirebaseListObservable zu Array

this.productos = af.database.list('/productos', { 
    query: { 
     orderByChild: 'categoria', 
     equalTo: this.catnombre 
    } 
    }); 

Ich brauche alle id extrahieren von hier und in einem Array festgelegt, aber ich weiß nicht, wie, danke.

Edit:

ich die id extrahieren kann, aber ich de Schlüssel, jetzt brauche ich andere Daten zu extrahieren, aber snapshot.val, arbeiten nicht.

this.productos = af.database.list('/productos/', { 
    query: { 
     orderByChild: 'categoria', 
     equalTo: this.catnombre 
    }, preserveSnapshot:true 
    }); 

    this.productos.subscribe(snapshot => { 

     snapshot.forEach(snapshot => { 

      console.log(snapshot.key); 
      this.idproductos.push(snapshot.key); 

     }); 
     console.log(this.idproductos); 
    }); 

Antwort

2

Alles, was Sie tun müssen, ist

this.productos = af.database.list('/productos/', { 
    query: { 
     orderByChild: 'categoria', 
     equalTo: this.catnombre 
    }) 
    .map(products => products.map(product => product.$key)); 

Das Ergebnis wird eine beobachtbare von Anordnungen von Tasten sein. Jetzt können Sie es abonnieren oder tun, was immer Sie wollen.

this.productos.subscribe(keys => console.log("keys are", keys)); 

Wenn AngularFire, und Dinge wie FirebaseListObservable, werden verwendet, richtig, Sie brauchen sich nicht um Schnappschüsse zu kümmern oder ihre val() nehmen, oder tun forEach auf sie, oder Elemente zu nehmen und sie auf Ihrem eigenen Array setzen . Die FirebaseListObservable ist eine beobachtbare von Arrays. Einfach map es um andere Observablen zu erstellen, wie wir es oben getan haben, um eine Observable von Arrays von Schlüsseln zu erstellen, oder abonnieren Sie es, um die zugrunde liegenden Daten zu erhalten.

+0

Das Problem ist, dass ich dieses Array für andere Funktionen brauche, ich weiß nicht, wie ein Observable gelesen. –

+0

Ich empfehle, ein gutes Tutorial über Observables zu lesen oder erneut zu lesen. Sie "lesen ein Observable", indem Sie es abonnieren und dann Dinge tun, die Sie mit den Daten im Handler tun möchten, die Sie an "subscribe" übergeben. Eine Sache, die Sie im Subscriber-Handler tun können, ist eine Kopie der Daten irgendwo zu speichern, was gut ist, solange Sie sich erinnern, dass die Daten nicht verfügbar sein werden, bis das Observable zu feuern beginnt - im Fall von AngularFire, bis die Daten wurden abgerufen. –

+0

Ah ok, ich verstehe, ich werde versuchen, Thamks sehr viel. –