带有AngularFire,有序和有限连接的Firebase

时间:2016-09-22 21:27:16

标签: firebase firebase-realtime-database angularfire

我正在使用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个组。

这样做的最佳方法是什么?谢谢!

1 个答案:

答案 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数组。

正如我所说,可能有更好的方式(我有兴趣看看是否有人有更好的方法),但这似乎对我有用。