2016-10-04 8 views
1

基本的なFirebaseクエリに問題があります。アプリケーションの残りの部分でデータを持ち運びに問題はありません。 Firebase認証の場合でも。クエリのプロパティにアクセスする際にエラーが発生しました - AngularJS + Firebase

しかし、これらのクエリでは、そのプロパティにアクセスしようとすると、私には定義されていません。それは明確に定義されていますが。

エラーが表示されますか?ありがとう。

私は仕事誰とバージョンは以下のとおりです。

"dependencies": { 
    "angular": "^1.5.8", 
    "bootstrap": "^3.3.7", 
    "angular-bootstrap": "^2.1.0", 
    "angularfire": "^2.0.2", 
    "firebase": "^3.3.2", 
    "angular-animate": "^1.5.8", 
    "angular-route": "^1.5.8", 
    "textAngular": "^1.5.11", 
    "angular-socialshare": "angularjs-socialshare#^2.3.1", 
    "angular-timeago": "^0.4.3" 
    } 

これは図である。

<div ng-controller="blogpostCtrl"> 
{{post}} 
{{post.Title}} 
</div> 

これはfirebaseの内容です:

{ 
    "blog" : { 
    "posts" : { 
     "-KT9vxYoCkly93GqTSY7" : { 
     "CreationDate" : 1475504757165, 
     "Post" : "<p>esto es una prueba de post</p>", 
     "Title" : "esto es una prueba", 
     "Url" : "esto_es_una_prueba", 
     "isPublished" : true 
     }, 
     "-KTA-f-BDAzC-4T4a50K" : { 
     "CreationDate" : 1475505991860, 
     "Post" : "<p>dsf sdf sdfs fd</p>", 
     "Title" : "o1i21o3i", 
     "Url" : "o1i21o3i", 
     "isPublished" : true 
     }, 
     "-KTA-ggQSQLnDr4eQtfi" : { 
     "CreationDate" : 1475505998783, 
     "Post" : "<p>ds sdf sdf</p>", 
     "Title" : "4 45654456 2546345562535", 
     "Url" : "4_45654456_2546345562535", 
     "isPublished" : true 
     } 
    } 
    } 
} 

これはコントローラです。

app.controller("blogpostCtrl", function($scope, $location, $routeParams, $firebaseArray) { 
    var ref = firebase.database().ref("blog/posts"); 

    $scope.post = $firebaseArray(ref.orderByChild("Url").equalTo($routeParams.uri)); 

    console.log($scope.post) 
    console.log($scope.post.Title) //<------------ undefined 

    firebase.database().ref("blog/posts").orderByChild("Url").equalTo($routeParams.uri).once('value').then(function(snapshot) { 
    console.log(snapshot.val()) 
    console.log(snapshot.val().Title) //<------------ undefined 
    }); 
    firebase.database().ref("blog/posts").on('value', function(snapshot) { 
    console.log(snapshot.val()) 
    console.log(snapshot.val().Title) //<------------ undefined 
    }); 
}); 

そして、これは、コンソール出力です:

[]0: Object$$added:()$$error:()$$getKey:()$$moved:()$$notify:()$$process:()$$removed:()$$updated:()$add:()$destroy:()$getRecord:()$indexFor:()$keyAt:()$loaded:()$ref:()$remove:()$save:()$watch:()length: 1__proto__: Array[0] 
ctrl.js:163 undefined 
ctrl.js:170 Object {-KT9vxYoCkly93GqTSY7: Object, -KTA-f-BDAzC-4T4a50K: Object, -KTA-ggQSQLnDr4eQtfi: Object}-KT9vxYoCkly93GqTSY7: Object-KTA-f-BDAzC-4T4a50K: Object-KTA-ggQSQLnDr4eQtfi: Object__proto__: Object 
ctrl.js:171 undefined 
ctrl.js:166 Object {-KTA-ggQSQLnDr4eQtfi: Object}-KTA-ggQSQLnDr4eQtfi: ObjectCreationDate: 1475505998783Post: "<p>ds sdf sdf</p>"Title: "4 45654456 2546345562535"Url: "4_45654456_2546345562535"isPublished: true__proto__: Object__proto__: Object 
ctrl.js:167 undefined 
+0

ofcourse未定義です。 'Title'は別のオブジェクトのプロパティです – Akis

+0

はい、少なくとも、スナップショットのクエリでエラーが発生しました。しかし、$ scope.post = $ firebaseArray(ref.orderByChild( "URL")equalTo($ routeParams.uri)を使って作業しているとき)。私には問題があります。 さらに、私は相談するデータの鍵を得ることができません。私がキーを持っていれば、フィールドの中にクエリーを作成しません。 – Epifanio

答えて

0

.Titleあなたは未定義になっているなぜこれがある子オブジェクトのプロパティです。あなたはそのタイトルが必要な場合には、例えば、同様のオブジェクトのキーを含める必要があります。あなたのJSONレスポンス http://jsfiddle.net/b2pfLp26/

に基づいて

console.log($scope.post.blog.posts['-KT9vxYoCkly93GqTSY7'].Title) 

チェックこのフィドルご$filterArrayあなたが印刷されたコンソールを取得する前に待機する必要がありについてだから.thenを使用しなければならない。

var array = $firebaseArray(ref.orderByChild("Url").equalTo($routeParams.uri)); 

array.$loaded().then(function(response){ 
    console.log(response); 
}); 
+0

ありがとうございます。あなたは、スナップショットを使って最後の2つのクエリが正しいです。ただし、このクエリでは機能しません。 $ scope.post = $ firebaseArray(ref.orderByChild( "Url")。equalTo($ routeParams.uri)); 生成された配列の値は0ですが、scope.post.Title $または$ scope.post [0] .titleにはアクセスできません。 – Epifanio

+0

@Epifanioあなたの最後の2つのクエリは、正しい方法である 'then'を使用します。最初のクエリも同様に変更してください。 – Akis

+0

@Epifanioは' firebaseArray'の使用例を使って自分の答えを更新しました。 – Akis

関連する問題