无法从firebase

时间:2016-01-24 21:58:38

标签: angularjs ionic-framework firebase

我试图从firebase及其格式中检索数据:

>Users
--->UID
------>email:
------>height:
------>etc...

由于某种原因,当我尝试获取say email的值时,UID会继续返回undefined。这是尝试检索数据的代码:

.factory('Chats', function($rootScope) {
  // Might use a resource here that returns a JSON array
  var chats;

  return {
    all: function() {
      return chats;
    },
    initialize: function(isLoggedIn) {

      var data = $rootScope.ref.getAuth().uid;
      console.log("initialize: " + data);
      if(isLoggedIn == true) {
        $rootScope.ref.on("value", function(snapshot) {
          console.log("Value: " + snapshot.val());
          console.log("Users: " + snapshot.val().users);
          console.log("Data: " + snapshot.val().users.data.email);
        }, function (errorObject) {
          console.log("The read failed: " + errorObject.code);
        });
      }
}
};
})

当它获得第三个console.log('数据'一个)时会中断,它会抛出异常说:

Cannot read property 'email' of undefined

但是当我在if语句之前记录变量data1时,它以字符串的形式返回用户的正确UID,所以我不明白为什么它告诉我它未定义。我试图做的就是挖掘我的firebase树并根据用户的UID检索用户的值(电子邮件,高度等) - 我通过调用ref.getAuth()。uid来检索。

先谢谢!

1 个答案:

答案 0 :(得分:0)

您正在阅读Firebase的根目录,然后尝试访问:

snapshot.val().users.data.email

对应于:

/users/data/email

如果您检查JSON数据,则会发现/users没有名为data的子节点。要使用数据的,您需要使用括号表示法:

snapshot.val().users[data].email

请注意,您加载的方式比您的方法更多。如果您只从数据库下载数据,您的用户可能会很感激,您可以这样做:

$rootScope.ref.child("users").child(data).on("value", function(snapshot) {
  console.log("Data: " + snapshot.val().email);
}, function (errorObject) {
  console.log("The read failed: " + errorObject.code);
});

最后一点:如果您将电子邮件地址绑定到$scope,您会发现Angular视图不会立即获取它。这是因为on()回调中的代码是异步调用的,到那时AngularJS不再知道您的操作了。您可以了解如何让AngularJS了解此答案中的更改:Firebase callbacks and AngularJS。但另外,L考虑使用AngularFire来完全避免这个问题。