2016-12-06 140 views
1

嗨,我不是专业版的firebase,刚开始工作。搜索了很多地方后,我无法找到解决问题的办法。 My firebase database structure is as follow: 我想检索特定配置文件的数据以及由firebase和生成的唯一$ id。

$scope.login = function(users) 
    { 
    firebase.auth().signInWithEmailAndPassword(users.email, users.password) 
    .then(function(result) 
    { 
     var ref = firebase.database().ref("/profiles"); 
     var examination = $firebaseArray(ref.orderByChild('uid').equalTo(result.uid)); 
     console.log(examination); 

,并导致我得到的是 like this 谁能帮我在这方面,即如何从结果得到的值。提前致谢。

回答

1

如果要检索数据,并在你的代码记录它,不要用AngularFire和坚持的JavaScript SDK:

$scope.login = function(users) { 
    firebase.auth().signInWithEmailAndPassword(users.email, users.password) 
    .then(function(result) { 
    var ref = firebase.database().ref("/profiles"); 
    var examination = ref.orderByChild('uid').equalTo(result.uid); 
    examination.on('value', function(snapshot) { 
     console.log(snapshot.val()); 
    }); 

你会注意到,我添加on('value',这是你告诉Firebase SDK开始加载数据库中的数据。在Firebase documentation for web developers中涵盖了这一点以及更多内容,我强烈建议您阅读该端到端内容。花了几个小时,会有比你想象的更多的问题。

如果您喜欢坚持使用AngularFire,那么您应该停止使用console.log来检查加载状态。从AngularFire quickstart

... $scope.data将从远程服务器填充。这是一个异步调用,因此在控制器中的数据可用之前需要一些时间。尽管在下一行放置console.log以读取结果可能很诱人,但数据不会被下载,因此该对象将显示为空。

相反,你可以简单地直接在HTML模板显示数据:

记录的数据是采用了棱角分明的json过滤视图中打印出来的最简单方法。 AngularFire告诉Angular编译器加载数据的时间,因此不需要担心它何时可用。

<pre>{{ data | json }}</pre> 

这最后一个片段来自handling asynchronous operations的AngularFire指南中。

1

使用$loaded()承诺看值:

$scope.login = function(users) 
    { 
    firebase.auth().signInWithEmailAndPassword(users.email, users.password) 
    .then(function(result) 
    { 
     var ref = firebase.database().ref("/profiles"); 
     var examination = $firebaseArray(ref.orderByChild('uid').equalTo(result.uid)); 
     //console.log(examination); 
     examination.$loaded().then(function (exam) { 
      console.log(exam); 
     }); 

重要的是要认识到,调用$firebaseArray方法立即返回一个空数组是很重要的。一旦从服务器返回数据,现有参考将填入实际数据。

$loaded()方法返回一个承诺,当从数据库中下载数组数据时,该承诺将被解析。该承诺解析为$firebaseArray

+0

非常感谢。它的工作。 :) – Danial