2016-08-19 189 views
0

如何从Firebase Web API的下列结构中获取Inmate_DOB的值。Firebase自定义查询

请看以下卡:

Firebase Dashboard - Realtime DB

我尝试下面的代码是正确处理,但我没有检索值。

GetInmate.Js

angular.module('starter.InMateIdContactDetailsController', ['firebase']) 

.controller('InMateIdContactDetailsCtrl', function($scope,$rootScope,$filter,$ionicLoading,$state,$window, $cordovaSQLite,$cordovaCamera,$firebase,$firebaseAuth,$firebaseArray) { 

var userId = firebase.auth().currentUser.uid; 

var ref = firebase.database().ref().child("Tables/Inmate_Data"); 

$scope.InMatedata = $firebaseArray(ref); 

if(!$scope.InMatedata){ 

alert('Records not found Auth!'); 

}else{ 

alert('Records found! Auth'); 

} 

firebase.auth().onAuthStateChanged(function(user) { 

if(user) { 
var userID = user.uid; 

firebase.database().ref('Tables/Inmate_Data/'+userID).once('value').then(snapshot => { 
const userDOB = snapshot.val().Inmate_DOB; 
alert(userDOB); 
alert(test); 
}) 
} 
}); 



}); 
+0

GET值给出一个静态密钥 –

回答

1

我认为你只是缺少在原始代码/'Tables/Inmate_Data'后。

return firebase.database().ref('Tables/Inmate_Data/' + userId).once('value') 
.then(function(snapshot) { 
     var Inmate_dob = snapshot.val().Inmate_DOB; 
     alert(Inmate_dob); 
} 
0

而不是使用firebase.auth().currentUser.uid的,你可能需要使用onAuthStateChanged(),这样你总是可以肯定的是,如果用户另有firebase.auth().currentUser实际登录可能会返回null块中的代码才会执行​​。如果您已经确定该值不为空,那么你可以做这样的事情:

var userID = firebase.auth().currentUser.uid; //Current User UID 

firebase.database().ref('Tables/Inmate_Data/'+userID).once('value').then(snapshot => { 
    const userDOB = snapshot.val().Inmate_DOB; 
    alert(userDOB); 
}); 

为了避免越来越空,你可以把上面的代码中onAuthStateChanged

firebase.auth().onAuthStateChanged(function(user) { 

    if(user) { 
     var userID = user.uid; 

     firebase.database().ref('Tables/Inmate_Data/'+userID).once('value').then(snapshot => { 
      const userDOB = snapshot.val().Inmate_DOB; 
      alert(userDOB); 
     }); 
    } 
}); 

如果你想检索所有用户的出生日期,那么你可以做这样的事情:而不是

firebase.database().ref('Tables/Inmate_Data').on('child_added', snapshot => { 
    firebase.database().ref(snapshot.key+'/Inmate_DOB').on('value', snap => { 
     const userDOB = snap.val(); 
     alert(userDOB); 
    }); 
}); 
+0

我跟你有换货相同的代码在上面离子,我有userId值,但我得到的DOB值为空。 –

+0

@ShivSuthanM你有没有尝试把这个代码放在'onAuthStateChanged()'里面? –

+0

没有一点困惑,无法正确进行。 –