2017-10-09 57 views
1

我想单独加载Firebase中每个对象的子对象。通过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使异步调用火力但不知道怎么做这行得通?

回答

3

一种选择是获得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;