Javascript 如何在Firebase中的多个特定位置侦听数据更改?
我正在使用Firebase作为我正在开发的移动应用程序(JS Web SDK)的实时数据库,结构如屏幕截图所示,键=电子邮件,每个键都有移动用户信息,并且在node=“path”内移动位置的GPS协调 如何监听所有电子邮件(用户)的所有“路径”Javascript 如何在Firebase中的多个特定位置侦听数据更改?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我正在使用Firebase作为我正在开发的移动应用程序(JS Web SDK)的实时数据库,结构如屏幕截图所示,键=电子邮件,每个键都有移动用户信息,并且在node=“path”内移动位置的GPS协调 如何监听所有电子邮件(用户)的所有“路径” 直接从火场出发: 值:读取并侦听对路径整个内容的更改 此函数在启动时将运行一次,并且对于路径下的数据的每次更改将再次运行snapshot将返回user/的所有内容,这是每次更改都要返回的大量数据。您可以相应地更改ref。代码中的解决方案: var ref
直接从火场出发: 值:读取并侦听对路径整个内容的更改
此函数在启动时将运行一次,并且对于路径下的数据的每次更改将再次运行
snapshot
将返回user/
的所有内容,这是每次更改都要返回的大量数据。您可以相应地更改ref
。代码中的解决方案:
var ref = new Firebase("https://<your Firebase>/mobile/users");
users.forEach(function (childSnapshot) {
// childSnapshot == mobile/users/email
var data = childSnapshot.val();
childSnapshot.forEach(function (path) {
if (path.key() == 'path') {
//create reference for each path
var pathRef = path.ref();
pathRef.limitToLast(1).on('child_added', function (childSnapshot, prevChildKey) {
// now you are listening on all "path" under each user/email
})
}
})
})
var ref=新Firebase(“https:///mobile/users");
users.forEach(函数(childSnapshot){
//childSnapshot==手机/用户/电子邮件
var data=childSnapshot.val();
childSnapshot.forEach(函数(路径){
if(path.key()==“path”){
//为每个路径创建引用
var pathRef=path.ref();
pathRef.limitToLast(1).on('child_added',函数(childSnapshot,prevChildKey){
//现在,您正在收听每个用户/电子邮件下的所有“路径”
})
}
})
})
如果需要,您可以收听特定事件:
// Get a reference to the database service
var database = firebase.database();
var usersRef = database.ref('whatever/users');
usersRef.on('child_added', (snapshot) => {
console.log('user was added !!');
});
usersRef.on('child_removed', (snapshot) => {
console.log('user was removed !!' );
});
usersRef.on('child_changed', (snapshot) => {
console.log('user was changed !!' ;
});
有没有什么建议,如何监听多个但特定的节点,而不监听整个树,因为它是巨大的?我的应用程序就像Instagram,我有一个无限的元素卷轴,只想将消息实时输出到所需的照片,而不需要重新加载整个页面的数据。老实说,如果一个节点中的数据那么大,你可能想重新构造数据。已经找到了一个超短且轻量级的解决方案,谢谢@Dimitri嘿,如果你有其他的方法,那么你可以分享你解决这个问题的方法,然后为每个路径添加侦听器。感谢这仅在firebase未设置身份验证时有效,这意味着您的数据是公开的。
// Get a reference to the database service
var database = firebase.database();
var usersRef = database.ref('whatever/users');
usersRef.on('child_added', (snapshot) => {
console.log('user was added !!');
});
usersRef.on('child_removed', (snapshot) => {
console.log('user was removed !!' );
});
usersRef.on('child_changed', (snapshot) => {
console.log('user was changed !!' ;
});