2016-07-23 27 views
10

Ich versuche, ein einfaches Programm zu erstellen, das Name, Handynummer und E-Mail-Adresse vom Benutzer nimmt und dann die Daten auf Firebase Realtime Database stellt.So rufen Sie Daten aus der Firebase-Datenbank ab?

Es gibt 3 Eingabefelder und eine Schaltfläche, die beim Klicken die obige Operation ausführt. Hier ist der Code:

<input type="text" id="name"> 
<input type="text" id="mobile"> 
<input type="text" id="email"> 

<button type="button" id="button" onclick="addLead()">Submit</button> 

ich eingerichtet haben Firebase wie folgt aus:

<script src="https://www.gstatic.com/firebasejs/3.2.0/firebase.js"></script> 
<script> 
    // Initialize Firebase 
    var config = { 
    ... 
    }; 
    firebase.initializeApp(config); 

    var database = firebase.database(); 
</script> 

Und hier ist meine addLead() Funktion:

function addLead() { 
    var clientName = document.getElementById('name').value; 
    var clientMobile = document.getElementById('mobile').value; 
    var clientEmail = document.getElementById('email').value; 

    var newClientKey = database.ref().child('leads').push().key; 
    database.ref('leads/'+newClientKey+'/name').set(clientName); 
    database.ref('leads/'+newClientKey+'/mobile').set(clientMobile); 
    database.ref('leads/'+newClientKey+'/email').set(clientEmail); 
} 

Dies ist, wie ich Daten in die Datenbank gestellt was funktioniert.

enter image description here

So ist die newClientKey eine Schnur erzeugt, es funktioniert gut, wenn das Einfügen aber jetzt, wie abrufen? Die official documentation ist keine Hilfe. Diese generierte Zeichenfolge könnte auf dem Zeitstempel basieren. Wenn dies der Fall ist, wäre es unmöglich, sie erneut zu generieren.

Beim Abrufen, wie bekomme ich Zugriff auf E-Mail, Handy und Name unter dieser einzigartig generierten Zeichenfolge, die nur zum Zeitpunkt des Einfügens verfügbar war?

Durch die obige Struktur, muss ich 2 Ebenen nach unten auf die erforderlichen Daten zugreifen und wegen der fehlenden Dokumentation, weiß ich nicht, wie das zu tun, ich bin mir nicht sicher, ob so etwas wird Arbeit:

database.child().child(); 
+0

Was bedeutet 'database.ref(). Child ('führt'). Once ('wert'). Then (funktion (lead) { console.log (lead.val(). Email, lead.val () .mobile, lead.val(). name); }); 'produzieren in der Konsole? – Deryck

+1

@Deryck es produziert 'undefined'. –

Antwort

22

Die Antwort auf diese Frage tief Database Reference innerhalb Firebase begraben ist. forEach() wird verwendet, um zu dem Kind zu gelangen, ohne den genauen Pfad des Kindes zu kennen.

var leadsRef = database.ref('leads'); 
leadsRef.on('value', function(snapshot) { 
    snapshot.forEach(function(childSnapshot) { 
     var childData = childSnapshot.val(); 
    }); 
}); 

Jetzt childSnapshot enthalten können die erforderlichen Daten, dasselbe auch mit child_added zugegriffen werden.

leadsRef.on('child_added', function(snapshot) { 
     //Do something with the data 
}); 

Der einzige Unterschied besteht im Falle der forEach() daß, wird es eine Schleife durch von vornherein so dass, wenn neue Daten hinzugefügt werden, wird es auch die vorherigen Daten geladen werden, aber im Falle von child_added, der Hörer nur auf neues Kind und nicht auf die vorher existierenden Kinder.

+0

Sehr nützlich. Vielen Dank. – Gaetano

+1

Ich wünschte wirklich, das wäre in der Standard-Dokumentation. Tief vergraben! – brandonscript

Verwandte Themen