我有一个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 :(得分:1)
我认为这可能就是答案:快照有一把钥匙。
由于您使用的是child_added,因此每次只读一个子进程,因此每个子snap.key将为您提供该子快照的密钥。换句话说,child_added行之后的闭包内的代码将为Stories节点中的每个子节点运行一次。
如果您要使用值,则会在一个“大”快照(一个包含多个子节点的父节点)中读取Stories节点中的所有数据。所以它看起来像
Stories
story_0
story_info: "ads"
story_1
story_info: "assad"
在这种情况下,您需要遍历Stories快照以获取每个孩子(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);
});
如果你想使用值一次获取所有故事,这将在Stories节点中读取并迭代子节点,输出每个键
storiesRef.once('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
console.log(childSnapshot.key);
});
});
请注意,上面的child_added函数将获取每个子节点并继续侦听child_added事件,而上面的值函数将执行一次而不会侦听将来的事件。