如何绕过唯一ID和引用子节点

时间:2015-08-01 01:24:22

标签: firebase angularfire

我的firbase数据库如下所示:

app
   users
       -gn4t9u4ut304u9g4
            email
            uid

如何参考电子邮件和uid?当我尝试这个时:

        $rootScope.dashtype.child('users').orderByChild('uid').equalTo($rootScope.auth.uid).on('value', function(snapshot){
            $rootScope.user = snapshot.val();
            console.log($rootScope.user);
        })

我得到了正确的对象,但是以root作为唯一ID:

Object {-JvaZVrWGvJis0AYocBa: Object}

因为这是一个动态属性,我不知道如何引用子对象。我只是希望能够访问这样的用户字段:$ rootScope.user.email etc.

1 个答案:

答案 0 :(得分:3)

由于您正在请求某个值,因此您会获得一个用户列表。它可能只是一个用户,但它仍然是一个用户列表。

您必须循环快照,才能进入子节点:

$rootScope.dashtype.child('users').orderByChild('uid').equalTo($rootScope.auth.uid).on('value', function(snapshot){
    snapshot.forEach(function(userSnapshot) {
        $rootScope.user = userSnapshot.val();
        console.log($rootScope.user);
    });
});

由于列表中只有一个用户,因此只执行一次循环。

您正在将常规Firebase JavaScript与AngularFire混合在一起。这意味着您需要通知AngularJS您更新了范围,以便它将重新呈现视图:

$rootScope.dashtype.child('users').orderByChild('uid').equalTo($rootScope.auth.uid).on('value', function(snapshot){
    snapshot.forEach(function(userSnapshot) {
        $timeout(function() {
            $rootScope.user = userSnapshot.val();
            console.log($rootScope.user);
        });
    });
});