2016-07-23 7 views
10

Próbuję utworzyć prosty program, który pobiera nazwę, numer telefonu komórkowego i adres e-mail od użytkownika, a następnie umieszcza dane w bazie danych Firebase Realtime.Jak odzyskać dane z Bazy danych Firebase?

Istnieją 3 pola wprowadzania i przycisk, który po kliknięciu wykonuje powyższą operację. Oto kod:

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

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

Wcześniej skonfigurować Firebase tak:

<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> 

I tu jest moje addLead() funkcja:

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); 
} 

ten sposób umieścić dane do bazy danych który działa.

enter image description here

Więc newClientKey generuje pewien ciąg, to działa dobrze, ale teraz przy wkładaniu jak odzyskać? official documentation nie pomaga. Ten wygenerowany łańcuch może być oparty na sygnaturze czasowej, jeśli tak jest, wtedy ponowne wygenerowanie byłoby niemożliwe.

Podczas pobierania, w jaki sposób uzyskam dostęp do poczty e-mail, telefonu komórkowego i nazwy pod tym unikalnie wygenerowanym łańcuchem, który był dostępny tylko w momencie wstawiania?

Przechodząc przez powyższą strukturę, muszę uzyskać 2 poziomy w dół, aby uzyskać dostęp do wymaganych danych, a z powodu braku dokumentacji, nie wiem jak to zrobić, nie jestem pewien, czy coś takiego będzie praca:

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

co to jest 'database.ref(). Child ('leads'). Once ('value'). Then (function (lead) { console.log (lead.val(). Email, lead.val () .mobile, lead.val(). name); }); 'produkują w konsoli? – Deryck

+1

@Deryck tworzy "niezdefiniowany". –

Odpowiedz

22

odpowiedź na to pytanie jest głęboko wewnątrz Firebase Database Reference. forEach() służy do uzyskania dostępu do dziecka bez znajomości dokładnej ścieżki dziecka.

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

Teraz childSnapshot zawiera wymaganych danych, to samo można również uzyskać za pomocą child_added.

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

Jedyną różnicą jest to, że w przypadku forEach(), to będzie pętli od początku, więc jeśli jakieś nowe dane zostaną dodane, będzie to również załadować dane z poprzedniej, ale w przypadku child_added, słuchacz jest tylko na nowym dziecku, a nie na poprzednich istniejących dzieciach.

+0

Bardzo przydatne. Dziękuję Ci. – Gaetano

+1

Naprawdę chciałbym, żeby to było w standardowych dokumentach. Rzeczywiście głęboko pogrzebane! – brandonscript