2014-12-03 77 views
0

我在这里遇到了问题。 下面的代码是检查用户状态,然后返回应用程序的名字和其他信息。目前我无法访问从Firebase数据库返回的firstname和其他对象。有没有其他方法可以使用,还是我在这里做非法的事情?我一直在努力挣扎。欢迎任何帮助或建议。Firebase角度数据

myApp.controller('StatusController', 
     function ($scope, $rootScope, $firebaseAuth, FIREBASE_URL, $location, Authentication) { 

    $scope.logout = function(){ 
     Authentication.logout(); 
     $location.path('/login'); 
    } 
     var authData = new Firebase(FIREBASE_URL + '/users/'); 
     var syncAuthData = $firebaseAuth(authData).$asObject(); 

     if (syncAuthData) { 
      $scope.currentUser = syncAuthData; // Here currentUser should access firstname and etc 
      console.log("Logged in as:", syncAuthData); 
     } else { 
      console.log("Logged out"); 
      $scope.currentUser = null; 
     } 


     ////var authData = syncAuthData.$getAuth(); 
     //if (syncAuthData) { 
     // $scope.currentUser = syncAuthData; 
     // console.log("Logged in as:", syncAuthData); 
     //} else { 
     // console.log("Logged out"); 
     // $scope.currentUser = null; 
     //} 

});//Statuscontroller 

回答

2

似乎有你的代码样本中的两个潜在的问题:

  1. 您正在使用$ firebaseAuth对象创建一个数据同步对象,我不相信它会做。
  2. 您的代码假设Firebase数据将同步返回,但情况并非如此。

如果你想查询数据,我相信你需要使用$firebase(ref).$asObject()而不是$firebaseAuth(ref).$asObject()AngularFire API Docs for $firebaseAuth不建议这种用法。你要遵循什么示例或文档?其次,Firebase数据是异步回来的,因此您记录数据的代码在运行时可能没有结果。有一个$loaded()方法返回一个承诺,您可以使用它来附加数据到达时的回调。

与这两个变化,代码可能是这个样子:

var usersRef = new Firebase(FIREBASE_URL + '/users/'); 
var syncObj = $firebase(usersRef).$asObject().$loaded() 
    .then(function (myData) { 
     console.log("My Firebase data is: ", myData); 
    }); 

我不是很熟悉的火力地堡认证,也许有人可以与如何从活跃用户获得属性的示例附和?

+0

使用$ getAuth()的[文档建议](https://www.firebase.com/docs/web/libraries/angular/guide.html#section-angular-authentication)。 – Kato 2014-12-04 21:45:51

+0

谢谢。这很有帮助。它运作良好。 – 2014-12-06 02:25:14