2016-05-27 8 views
0

ich mit AngularJS bin neu, und ich würde Push-Daten für meine Ansicht wie hier ist mein Code:Angular Push-Daten in Funktion nicht funktioniert

$scope.cards = []; 

firebase.auth().onAuthStateChanged(function(user) {  
    var firebaseRef = firebase.database().ref("users_location"); 
    var geoFire = new GeoFire(firebaseRef); 
    var posOptions = {timeout: 3000, enableHighAccuracy: false}; 

    $cordovaGeolocation 
    .getCurrentPosition(posOptions) 
    .then(function (position) { 
     $scope.cards = []; 
     var geoQuery = geoFire.query({ 
      center: [position.coords.latitude, position.coords.longitude], 
      radius: 10.5 
     }); 
     var onKeyEnteredRegistration = geoQuery.on("key_entered", function(key, location, distance) { 
      firebase.database().ref('users/'+key).on('value', function(snapshot) { 
       $scope.cards.push({ 
        id: key, 
        image: 'img/adam.jpg', 
        about: "Test message" 
        }); 
      }); 
     }); 
     console.log($scope.cards); // <--- show "[]" 

    }); 
}); 

Warum die console.log($scope.cards); mir zeigen „[]“ und wenn ich setzen diesen Code in die Firebase-Funktion Ich habe die Daten?

Danke

+0

Da der Firebase-Callback ausgeführt wird, wenn die Daten empfangen werden. Asynchrone Anfrage, also $ scope.cards, ist immer noch leer, wenn Sie console.log es ausloggen. – GillesC

Antwort

0

denke ich console.log($scope.cards); läuft vor $scope.cards loaded mit Daten.

Fügen Sie console.log($scope.cards); mit in angular js $scope.$watch hinzu, um die Daten anzuzeigen.

Wenn Sie Code nach $scope.cards mit Daten geladen ausführen möchten, fügen Sie diesen Code innerhalb $scope.$watch.

0

Dies liegt daran, das asynchrone Verhalten von Funktionen und aufgrund dieser

console.log($scope.cards); 

Calll vor dem Ergebnis der

firebase.database()