0

Ich versuche, Daten von Firebase zu erhalten. Ich mache Übungen, um Firebase besser zu lernen, und meine App ist wie eine Nachrichten-App.Angularjs Firebase erhält eine Liste von Daten

Mein Problem ist, dass ich versuche, diese Nachrichtendaten zu bekommen, aber weil sie eine eindeutige ID haben, kann ich sie nicht erreichen. Wie erreiche ich messagecontents, ?

Hier ist meine Datenbankstruktur:

angularish 
    -> <id> 
     -> "sender" : "john" 
     -> "to" : "sarah" 
     -> "date" : "16/09/2016" 
     -> "messageContent" : "Something like a long text..." 
    -> <id> 
     -> "sender" : "john" 
     -> "to" : "sarah" 
     -> "date" : "16/09/2016" 
     -> "messageContent" : "Something like a long text..." 
    -> <id> 
     -> "sender" : "john" 
     -> "to" : "sarah" 
     -> "date" : "16/09/2016" 
     -> "messageContent" : "Something like a long text..." 

Hier ist mein Code:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Test3 Angular</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script> 
    <script src="https://www.gstatic.com/firebasejs/3.4.1/firebase.js"></script> 
    <script src="https://www.gstatic.com/firebasejs/3.4.0/firebase-app.js"></script> 
    <script src="https://www.gstatic.com/firebasejs/3.4.0/firebase-auth.js"></script> 
    <script src="https://www.gstatic.com/firebasejs/3.4.0/firebase-database.js"></script> 
    <!-- Leave out Storage --> 
    <!-- <script src="https://www.gstatic.com/firebasejs/3.4.0/firebase-storage.js"></script> --> 
    <script> 
     // Initialize Firebase 
     firebase.initializeApp(config); 
    </script> 
    <script> 
     var app2 = angular.module("theapp",[]); 
     app2.controller("generalController",function($scope){ 

      var database = firebase.database(); 
      var rootRef = database.ref(); 
      var subRootRef = rootRef.child("angularish"); 
      $scope.messages = []; 

      rootRef.push({ 
       "sender":"y", 
       "to" : "x", 
       "messageContent" : "Something like a long text", 
       "date" : "10/06/2016" 
      }); 

      rootRef.on("value",function(snapshot){ 
      $scope.messages = snapshot.val(); 
      console.log(snapshot.val()); 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <div class="container" ng-app="theapp" ng-controller="generalController"> 
     {{ 1+1 }} 
     <ul> 
      <li ng-repeat="message in messages"> 
       {{ message.messageContent }} 
      </li> 
     </ul> 
    </div> 
</body> 
</html> 
+1

viel viel einfacher, wenn Sie angularFire verwenden – charlietfl

+0

Ich habe versucht, es zu benutzen, aber wieder konnte ich nicht :(Wie kann ich das tun angularfire in –

+0

Sie können mit 'startAt' und' endAt' https: // Feuerbasis .google.com/docs/database/web/retrieve-data # filtering_data Heres ein Beispiel http://jsfiddle.net/katowulf/vQEmt/2/ –

Antwort

2

Sie verpassen eine $scope.$apply(), da Sie Ihre get außerhalb des Winkel tat Zyklus verdauen.

rootRef.on("value",function(snapshot){ 
    $scope.messages = snapshot.val(); 
    console.log(snapshot.val()); 
    $scope.$apply(); 
}); 
+0

Wird nicht das Ergebnis von 'val()' konvertiert werden müssen auch in ein Array? Um mit "ng-repeat" zu arbeiten? – cartant

+1

'ng-repeat' arbeitet mit Objekten. Wenn sie es dann sortieren wollen, müssen sie es in ein Array konvertieren. Beispiel: http: // jsfiddle.net/kk8gyjt1/ –