这是我的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找到答案。
答案 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>