我的firebase上有以下结构
"users" : {
"06f0536d-2326-43a0-81db-9e94acc77b4e" : {
"address" : "xxxxxxxxxxxxx",
"displayName" : "xxxxxxx",
"email" : "xxx@xxx.com",
"fleet" : {
"-K6iGFIu5Jwu_AmWWDTL" : {
"avafrom" : 1451343600000,
"avauntil" : 1454540400000,
"brands" : "xxxxxxxxxx",
"desc" : "xxxxxxxxxxxx",
"dmile" : 5,
"drate" : 22,
},
"-K6iGUY6Y19PExwBklal" : {
"avafrom" : 1451516400000,
"avauntil" : 1454540400000,
"brands" : "xxxxx",
"desc" : "xxxxxxxxxxxxx",
"dmile" : 5,
"drate" : 12,
}
},
"phone" : "+49xxxxxxx",
"role" : "xxxxxxxxxxx"
},
"22dbc365-3201-4bc0-9f19-2a8a64bea235" : {
"address" : "xxxxxxxxxxx",
"displayName" : "xxxx",
"email" : "xxxx@xxxx.com",
"fleet" : {
"-K6ge_Y4enb_a13O1eCu" : {
"avafrom" : 1451343600000,
"avauntil" : 1451516400000,
"brands" : "xxxxxxxxxxx",
"desc" : "xxxxxxxxxxxxx",
"dmile" : 1,
"drate" : 22,
},
"-K6gexE9KXd3WGBnjIY8" : {
"avafrom" : 1451343600000,
"avauntil" : 1451516400000,
"brands" : "xxxxxxxxxx",
"desc" : "xxxxxxxxxxxxxx",
"dmile" : 1,
"drate" : 22,
}
},
"phone" : "+49xxxxxx",
"role" : "xxxxxxx"
},
和如何获取所有用户的机队列表?我尝试了以下内容:
var ref = new Firebase(fb+'users');
return {
fleet: function(){
ref.orderByChild("fleet").on("child_added", function(snapshot) {
console.log("data trucks", snapshot.val());
return snapshot.val();
})
}
}
但我最终获得了所有用户数据,而不仅仅是他们的车队。我甚至不确定我是否做得对,我想在这里建立一对多的关系,每个用户都可以拥有一个包含汽车列表的车队。我是Firebase的新手,英语不是我的母语,所以我真的不懂他们的文档,我想如果有人能给我一个例子来做这件事,那将是一个很大的帮助
任何帮助将不胜感激,提前感谢
答案 0 :(得分:0)
如果您只想要fleet
个节点,则需要重新构建数据。当您从父节点读取数据时,您也将获得所有子节点。
您可以关注uid
的{{1}},这是一个例子:
fleet
您也无法从异步功能返回。
{
"users": {
"06f0536d-2326-43a0-81db-9e94acc77b4e" : {
"address" : "xxxxxxxxxxxxx",
"displayName" : "xxxxxxx",
"email" : "xxx@xxx.com"
}
},
"fleet": {
"06f0536d-2326-43a0-81db-9e94acc77b4e" : {
"-K6ge_Y4enb_a13O1eCu" : {
"avafrom" : 1451343600000,
"avauntil" : 1451516400000,
"brands" : "xxxxxxxxxxx",
"desc" : "xxxxxxxxxxxxx",
"dmile" : 1,
"drate" : 22
}
}
}
}
数据必须通过网络下载,因此不会同步发生。
你可以传递一个回调:
ref.orderByChild("fleet").on("child_added", function(snapshot) {
return snapshot.val(); // won't work
})
但是,它仍然不是你理想的情况。
<强> Use AngularFire, which wraps each Firebase event to a synchronized array. 强>
function FleetFactory() {
var ref = new Firebase(fb+'users');
return {
fleet: function(callback){
ref.orderByChild("fleet").on("child_added", callback);
}
}
}
function MyController(FleetFactory) {
FleetFactory.fleet(function(snap) {
console.log(snap.val());
});
}
请勿尝试angular.module('app', ['firebase'])
.constant('FirebaseUrl', '<my-firebase-app>')
.service('rootRef', ['FirebaseUrl', Firebase])
.controller('MyCtrl', MyController);
function MyController($scope, rootRef, $firebaseArray) {
$scope.fleet = $firebaseArray(rootRef.child('fleet'));
}
,因为它最初会显示为空,因为数据仍在下载。但是,一旦数据下载,它将触发console.log($scope.fleet)
循环,数据将显示在页面上。
尝试在模板中执行$digest
过滤器以进行测试:
json