我正在使用AngularFire 2.0.2,它使用Firebase SDK 3.x.
由于此版本没有fire-utils
,我正在尝试手动创建规范化集合(特别是有序和有限的连接)。
我有这样的结构:
users: {
user_1: {
name:...,
groups: {
group_1: true,
group_2: true,
...
}
},
...
},
groups: {
group_1: {
group_name: ...,
last_edited: servertimestamp
},
group_2: {
group_name: ...,
last_edited: servertimestamp
},
...
}
我希望获得按last_edited
时间戳排序的用户的前10个组。
这样做的最佳方法是什么?谢谢!
答案 0 :(得分:1)
我不确定这是最好的方式,但是当我最近不得不这样做时,这就是我所做的。 (我在这里解压缩了匿名函数,因为我发现它们有时会混淆一些东西)
首先,查看您的用户:
user = $firebaseObject( firebase.database().ref().child('users').child(username) );
然后使用AngularFire $ loaded方法检查它何时加载并告诉它下一步该做什么:
user .$loaded().then( lookupGroups );
然后创建一个名为lookupGroups的函数来执行下一次查找。这将创建一个空数组,然后使用angular.forEach
遍历所有组function lookupGroups (){
$scope.groups= [];
angular.forEach(user.groups, getGroupData);
}
然后编写最终的getGroupData函数,该函数接受groupid,查找并将组数据添加到groups数组
function getArkData(key, value){
grouppath = firebase.database().ref().child('groups').child(value)
groupData = $firebaseObject( grouppath );
$scope.groups.push( groupData );
}
然后你可以在前端使用$ scope.groups数组。
正如我所说,可能有更好的方式(我有兴趣看看是否有人有更好的方法),但这似乎对我有用。