2016-10-02 3 views
0

私はこのCodePenFirebaseのsnapshot.val()またはsnapshot.exportVal()からプロパティ/値を取得する方法は?

に示されるように、以下のsnapshotとしての私の興味を持ったオブジェクトを取得することができましたが、コードスニペットです:

$scope.post = {}; 
     var postsRef = new Firebase('https://docs-examples.firebaseio.com/web/saving-data/fireblog/posts'); 

     $scope.searchPost = function() { 
      console.log('searched for author : ' + $scope.post.authorName); 

      postsRef.orderByChild('author') 
       .equalTo($scope.post.authorName) 
       .once('value', function (snapshot) { 
        var val = snapshot.val(); 
        console.log("Searched Post is : "); 
        console.log(val); 
        console.log("(From Val) Title is : " + val.title); 

        var exportVal = snapshot.exportVal(); 
        console.log("Export Value is : "); 
        console.log(exportVal); 
        console.log("(From Export Val) Title is : " + exportVal.title); 
       }); 
     } 

これは、使用してFirebase dataset午前です。

著者:gracehopを検索すると正しいスナップショットが表示されますが、その中にtitleなどのプロパティにアクセスすることはできません。両方ともval.title & exportVal.titleは、出力としてundefinedを与えている。

スナップショットから興味のあるプロパティを取得するにはどうすればよいですか?

答えて

2

クエリは、一致する子を含むスナップショットを返します。クエリは、対象のプロパティを含む子です。

は、スナップショットのforEachメソッドを使用して子供たちを列挙することができます

postsRef.orderByChild('author') 
    .equalTo($scope.post.authorName) 
    .once('value', function (snapshot) { 

     snapshot.forEach(function (childSnapshot) { 

      var value = childSnapshot.val(); 
      console.log("Title is : " + value.title); 
     }); 
    }); 
+0

感謝の男を、それが働きました。私たちが 'startAt()'と 'endAt()'を使って範囲を持つデータを照会するとき、データの配列を返すのは理にかなっていますが、 'equalTo()'と**固有ID **単一のオブジェクトだけが返されることを確信していますが、 'snapshot.innerObject.title'のような単一のオブジェクトに直接アクセスする方法はありますか? – BeingSuman

+1

Firebaseは、価値が一意であるかどうかを知らない。私はちょうどこのようなことをします: 'var k、v; snapshot.forEach(function(child){k = child.key; v = child.val(); trueを返します。 if(k){...} '。 'return true'は列挙を短絡させ、ユニークでなければ最初のマッチを得るだけです。 – cartant

+0

Perfecto !!再度、感謝します :) – BeingSuman

関連する問題