我想访问发件人姓名。
这是我的代码
var ref = firebase.database().ref().child('chat');
ref.on("child_added", function(data, prevChildKey) {
var newPlayer = data.val();
var key = data.key;
console.log(key);
});
data.key
为我提供了密钥1-5
。我想访问sender_name
下的1-5
值。我不知道怎么能这样做。我做过类似的事情
var newPlayer = data.val();
console.log(newPlayer[key]['sender_name'];
但是我得到了一个未定义的错误
答案 0 :(得分:1)
根据您显示的数据结构,chat
节点的子元素为1-5
,6-10
等密钥,不是聊天项。
Firebase child_added
事件仅针对直接子项启动。
如果您希望使用child_added
听众收听新项目,您可以:
chat/1-5
,chat/6-10
等添加的孩子,但我明白这不太方便总是听取1-5
孩子的示例:
var ref = firebase.database().ref().child('chat/1-5');
ref.on("child_added", function(data) {
var item = data.val();
console.log('New message', item['sender_name'], item.text);
});
如果您不知道第一个键是什么,但是您知道它以'1 - '开头,那么这是一个通用解决方案:
var ref = firebase.database().ref().child('chat');
var firstKey = null
ref.on("child_added", function(data) {
// If first key is what you are looking for
// and changed (or is null) update item listener
if (data.key.startsWith('1-') && data.key !== firstKey) {
// But first remove previous listener if present
firstKey && ref.child(firstKey).off("child_added", checkItemsAdded)
firstKey = data.key
ref.child(firstKey).on("child_added", checkItemsAdded)
}
});
function checkItemsAdded(data) {
var item = data.val();
console.log('New message', item['sender_name'], item.text);
}
更通用的,听取所有中间密钥(如果你不知道它们是什么):
var ref = firebase.database().ref().child('chat');
ref.on("child_added", function(data) {
// function checkItemsAdded is the same as above
ref.child(firstKey).on("child_added", checkItemsAdded)
});
请注意,此代码会侦听所有子键,例如1-5
等。所以,如果只有几个,或几打,我会说它没问题,但我不会建议将这个扩展到几百以上。
其他(推荐)选项:
chat
直接子项的方式更改数据结构。 (删除1-5
,6-10
级别)答案 1 :(得分:0)
正如@Pandaiolo所解释的那样,child_added
事件会触发您所听取的位置的直接孩子。对于每个孩子,它会为您提供该孩子下所有数据的快照。因此,您的data
参数包含您要查找的所有信息。你只需要遍历它,通过以下方式深入了解JSON:
var ref = firebase.database().ref().child('chat');
ref.on("child_added", function(data, prevChildKey) {
var newPlayer = data.val();
console.log(data.key);
data.forEach(function(child) {
console.log(child.key, child.child("sender_name").val());
});
});
这将打印所有发件人姓名。