2016-07-23 10 views
10

私は、ユーザーから名前、携帯電話番号、電子メールアドレスを取得し、Firebase Realtime Databaseにデータを保存する簡単なプログラムを作成しようとしています。Firebaseデータベースからデータを取り出す方法は?

上記の操作をクリックすると3つの入力ボックスとボタンがあります。ここでは、コードは次のようになります。

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

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

私はこのようなFirebaseを設定している:

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

そして、ここでは私のaddLead()機能です:

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

これは、私は、データベースにデータを置く方法ですうまくいく。

enter image description here

だから newClientKeyは挿入時に、それがうまく機能し、いくつかの文字列を生成しているが、現在はどのように取得するには? official documentationは役に立ちません。この生成された文字列はタイムスタンプに基づいている可能性があります。そうであれば、それを再度生成することは不可能です。

電子メール、モバイル、および名前にアクセスするには、挿入時にしか使用できなかった固有の文字列を使用します。

上記の構造では、必要なデータにアクセスするために2レベル下げる必要があります。ドキュメントの不足のため、これを行う方法がわかりません。このような場合作品:

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

「database.ref()」とは何かchild( 'leads')一度( 'value')then(function(lead){ console.log(lead.val()。email、lead.val ).mobile、lead.val()。name); }); 'コンソールで生成しますか? – Deryck

+1

@Deryckそれは '未定義'を生成します。 –

答えて

22

この質問への答えは、深いFirebase Database Reference内に埋め込まれています。 forEach()は、子供の正確な経路を知らなくても子供を得るために使用されます。

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

childSnapshotが必要なデータが含まれていますが、同じことがまたchild_addedを使用してアクセスすることができます。

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

唯一の違いは、forEach()の場合、それは新しいデータが追加されるので、もし開始からをループし、それはまた、以前のデータをロードしますが、child_addedの場合には、リスナーが唯一であるということです以前の既存の子どもではなく、新規の子どもに対して。

+0

非常に便利です。ありがとうございました。 – Gaetano

+1

私はこれが標準のドキュメントにあったことを本当に願っています。確かに深い埋葬! – brandonscript

関連する問題