2016-12-06 4 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は、リモートサーバーから入力されます。これは非同期呼び出しなので、データがコントローラで使用可能になるまでには時間がかかります。結果を読むために次の行にを置くことが魅力的かもしれませんが、データはまだダウンロードされないので、オブジェクトは空であるように見えます。

代わりに、あなたは、単にHTMLテンプレートに直接データを表示することができます。

データを記録する最も簡単な方法は、角のjsonフィルタを使用してビューの中でそれを印刷することです。 AngularFireは、データのロードが完了したときにAngularコンパイラに指示するため、いつ使用可能になるか心配する必要はありません。

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

この最後のスニペットはAngularFireガイドにhandling asynchronous operationsから来ています。

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

関連する問題