AngularFire - 可以指定$ firebase的成功回调吗?

时间:2014-07-12 13:08:25

标签: firebase angularfire

这是我的User服务:

angular.module('MyApp.services').service('User',
  function(FIREBASE_ROOT, $firebase, $timeout) {
    var users = $firebase(new Firebase(FIREBASE_ROOT + '/users'));

    console.log(users[21]); // => undefined

    $timeout(function() {
      console.log(users[21]); // => exists now!
    }, 2000);

    ...
  }
);

为什么users无法立即使用? 是不是$firebase阻止了?如果没有,是否可以指定成功回调? 我无法在the docs找到答案。

1 个答案:

答案 0 :(得分:3)

$ firebase没有阻止。它通过联系服务器来执行异步查找。

此外,返回的值是一个对象,而不是一个数组。一般情况下,您出于this article on array best practices中所述的原因,您希望使用非数字ID存储您的用户。

要等待加载数据,请使用以下方法。

版本0.7.1及以下:

var users = $firebase(URL);
users.$on('loaded', function() {
   console.log( users[21] );
});

0.8及以上版本(7月30日发布):

var users = $firebase(URL).asArray();
users.loaded().then(function() {
   console.log( users[21] );
});

回答了这个问题后,我要指出,这通常只对调试有用。 AngularFire绑定仅代表您工作。您不需要迭代它们,等待它们加载等等。只需将它们推入范围并在适当的时候在dom中使用它们;避免在控制器级别担心这些事情:

<li ng-repeat="user in users">{{user.$id}}: {{user.name}}</li>

<script>
  // in my controller:
  $scope.users = $firebase(URL);

  // or for 0.8 and above:
  // $scope.users = $firebase(URL).asArray();
</script>