2017-07-04 63 views
-2

我有一個firebase數據庫包含一個json數據,我將它追加到cardViews中,我想獲取cardView的關鍵點,但它返回數據庫中所有對象的數組。 這是我的index.js :如何獲得每一個對象的關鍵?

var rootRef = firebase.database().ref().child("Stories"); 
rootRef.on("child_added", snap => { 
    var title = snap.child("Story Title").val(); 
    var content = snap.child("Story Content").val(); 
    $("#stories").append("<div id=\"cold\" class=\"col s8 m6\"><div 
    class=\"card\"><div class=\"card-image\"><img 
    src=\"https://www.joshmorony.com/wp-content/uploads/2016/11/firebase.png\"> 
    <a class=\"btn-floating halfway-fab waves-effect waves-light red\"><i 
    class=\"material-icons\">info</i></a></div><div class=\"card-content\"><p 
    onclick=\"viewKey()\">" + title + "</p></div></div></div>"); 
    }); 

    function viewKey() { 
    firebase.database().ref('/Stories/').once('value').then(function(snapshot) { 
     var storiesArray = snapshot.val(); 
     var keys = Object.keys(storiesArray); 
     for (var i = 0; i < keys.length; i++) { 
     var currentStory = storiesArray[keys[i]]; 
     console.log(currentStory); 
     } 

    }); 
    } 

對象數組: [ 「-Ko8JpEjsdN2KGBdIG3f」, 「-Ko8JtdcEBICVZqIXLdO」, 「-Ko8TvZuu0Wh_XDGa1YW」, 「 - KoBR0NmVmerjomE63-V」, 「-KoBSOybd5ymvOwz0Ip6」]

+0

在for循環中嘗試console.log(鍵[i]) –

+0

仍然返回所有對象鍵的數組 –

+0

您可以發佈您的storiesArray對象 –

回答

1

我認爲這可能是答案是:快照有一個關鍵。

由於您使用的是child_added,因此每個孩子一次只能閱讀一個,因此每個孩子的snap.key會爲您提供該孩子快照的密鑰。換句話說,child_added行之後閉包內的代碼將爲Stories節點中的每個子節點運行一次。

如果您要使用值,則會讀入一個「大」快照(一個具有多個子項的父項)中「故事」節點中的所有數據。因此,它看起來像

Stories 
    story_0 
    story_info: "ads" 
    story_1 
    story_info: "assad" 

在這種情況下,你需要遍歷故事快照讓每個孩子(story_0,story_1等)。每個孩子都會擁有自己的snapshot.key。

Work with Lists of Data on the Web

此代碼將輸出每個故事的關鍵在使用child_added:

var storiesRef = firebase.database().ref().child("Stories"); 
storiesRef.on('child_added', function(snap) { 
    console.log(snap.key); 
}); 

如果你想用價值來獲得所有的故事在同一時間,這將在閱讀故事節點並遍歷子節點,輸出每個鍵值

storiesRef.once('value', function(snapshot) { 
    snapshot.forEach(function(childSnapshot) { 
    console.log(childSnapshot.key); 
    }); 
}); 

注意上面的child_added函數會得到每個孩子並繼續監聽child_added事件,而上面的值函數將執行一次,而不是監聽未來的事件。

相關問題