通过Firebase引用迭代加载其子项

时间:2017-10-09 09:23:55

标签: javascript firebase firebase-realtime-database angularfire

我想从firebase单独加载一个对象的每个子节点。

下面给出了一个非工作的代码片段,以便更好地解释这个想法:

var userId = firebase.auth().currentUser.uid;
  firebase.database().ref('/users/'+userId+"/foo/list").once('value').then(function(list) {
    var reffoo = firebase.database().ref().child("/foo/");
    for (var i = 0; i < list.length; i++) {
      ref = reffoo.child(list[i]);
      $scope.foo[ref] = $firebaseObject(ref);
    }
  });

根据我的分析,问题是, $ firebaseObject对firebase进行异步调用但不知道如何使其工作?

1 个答案:

答案 0 :(得分:4)

一种选择是获取集合的ref并迭代使用 data snapshot api

var ref = firebase.database().ref('/users/'+userId+"/foo/list");

ref.once('value', function(snapshot) {
  snapshot.forEach(function(childSnapshot) {
    var childKey = childSnapshot.key;
    var childData = childSnapshot.val();
    $scope.foo[childKey] = childData;
  });
});

如果您想保持对对象的实际angularFire引用,那么$firebaseArray可以提供帮助:

var list = $firebaseArray(ref);

// add an item
list.$add({ foo: "bar" }).then(...);

// remove an item
list.$remove(2).then(...);

// make the list available in the DOM
$scope.list = list;