如何在AngularJS中加载与Firebase相关的数据?

时间:2015-01-28 10:19:16

标签: angularjs firebase

我的数组对象是" 用户"存储这些用户的所有个人资料信息(例如姓名和电子邮件)及其user.uid

另一个对象" 朋友"每个user.uid的商店,用户的朋友但只有friend.uid

现在,当我检索user.uid的所有朋友时,我想以某种方式将此朋友的个人资料链接到显示器。这显然会导致异步加载出现问题。

我正在使用Firebase,并希望有人能举例说明他们是如何解决的。

我已尝试过以下内容,但它不起作用(显示$ loaded()之后的长度为0,即使它加载了列表中的所有用户:

控制器

FriendsService.getFriends(user.uid).$loaded(
    function(Friends){

      $scope.Friends = Friends;

      // Friends is here still undefined???

      angular.forEach(Friends, function(iterator){

        FriendsService.getUserData(iterator.friendID).$loaded(function(output){

          $scope.FriendsData.push(output)

        })
      })
    },
    function(error){
      window.alert("Ooooops: " + error)
    })

服务

var getFriends = function(userID) { 

    return fbutil.syncObject("friendsofusers/" + userID + "/friends/")

    // equivalent to:
    // var ref = new Firebase("https://yourapp.firebaseio.com/friendsofusers/" + userID + "/friends/");
    // var sync = $firebase(ref)
    // return sync.$asObject();

 };

 var getUserData = function(userID) {

            return fbutil.syncObject("users/" + userID);

        };

1 个答案:

答案 0 :(得分:0)

很难确定,因为你问题中的代码有些不完整。但是,您的代码很可能只需要通知AngularJS范围已被修改:

    FriendsService.getUserData(iterator.friendID).$loaded(function(output){
        $timeout(function() {
            $scope.FriendsData.push(output)
        }
    })

您需要为此服务注入$timeout。通过此调用,AngularJS将收到通知,表示有新数据可用且视图将更新。

请注意,the relevant section of the AngularFire guide中记录了这一点。