有没有可能给$firebase指定一个成功的回调?



以下是我的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不阻塞吗?如果没有,是否可以指定一个成功回调?我在文档中找不到答案。

$firebase未阻塞。它通过联系服务器来执行异步查找。

而且,返回的值是对象,而不是数组。一般来说,您将希望使用非数字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] );
});

回答了这个问题之后,让我指出这通常只对调试有用。angular的绑定只会为你工作。你不需要迭代它们,等待它们加载等等。只需将它们推入作用域并在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>

相关内容

  • 没有找到相关文章

最新更新