2016-10-04 6 views
1

Ich habe Probleme mit grundlegenden Firebase-Abfrage, es ist mit dem Rest der Anwendung kein Problem, Daten zu bringen und mit ihnen zu arbeiten. Und sogar mit Firebase-Authentifizierung.Fehler beim Zugriff auf die Eigenschaften einer Abfrage - AngularJS + Firebase

Allerdings, mit diesen Abfragen, wenn ich versuche, auf seine Eigenschaften zuzugreifen, gibt eine undefinierte mich zurück. Obwohl es klar definiert ist.

Wird jemand den Fehler sehen? Vielen Dank.

Versionen, mit denen ich arbeite, sind:

"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" 
    } 

Dies ist die Ansicht:

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

Dies ist der Inhalt von Feuerbasis:

{ 
    "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 
     } 
    } 
    } 
} 

Dies ist der Controller:

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 
    }); 
}); 

Und dies ist die Ausgabe der Konsole:

[]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

natürlich ist es undefiniert. 'Title' ist eine Eigenschaft eines anderen Objekts – Akis

+0

Ja, ich habe den Fehler zumindest bei Abfragen des Snapshots gesehen. Bei der Arbeit mit $ scope.post = $ firebaseArray (ref.orderByChild ("URL") equalTo ($ routeParams.uri).); Ich habe das Problem. Außerdem kann ich nicht den Schlüssel einiger Daten, die ich konsultiere, bekommen. Wenn ich den Schlüssel hatte, mache ich keine Abfrage mit einem Feld darin. – Epifanio

Antwort

0

.Title ist eine Eigenschaft des Kindes Objekt so ist dies, warum Sie nicht definiert bekommen. Wenn Sie diesen Titel benötigen, müssen Sie den Objektschlüssel umfassen auch, zum Beispiel:

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

prüfen diese Geige auf der Grundlage Ihrer json Antwort http://jsfiddle.net/b2pfLp26/

Über Ihre $filterArray Sie warten müssen, bevor die Konsole immer gedruckt also müssen Sie .then verwenden.

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

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

Danke. Sie haben Recht für die letzten zwei Abfragen mit Snapshot. Für diese Abfrage funktioniert es jedoch nicht. $ scope.post = $ firebaseArray (ref.orderByChild ("Url"). equalTo ($ routeParams.uri)); Obwohl das generierte Array den Wert 0 hat, kann ich nicht auf oder als scope.post.Title $ oder $ scope.post [0] .title zugreifen. – Epifanio

+0

@Epifanio Ihre letzten beiden Abfragen verwenden sie 'then', das ist der richtige Weg, ändern Sie Ihre erste Abfrage auch – Akis

+0

@Epifanio aktualisiert meine Antwort mit einem Beispiel dafür, wie' FirebaseArray' verwendet wird – Akis

Verwandte Themen