2016-05-27 2 views
0

Я новичок с AngularJS и я хотел бы нажимные данные с моей точкой зрения здесь мой код:Угловые нажимные данных в функцию не работает

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

    }); 
}); 

Почему console.log($scope.cards); показать мне «[]», и если я ставлю этот код в функцию firebase у меня есть данные?

Спасибо

+0

Поскольку обратный вызов firebase выполняется, когда данные получены. Асинхронный запрос, поэтому $ scope.cards по-прежнему пуст, когда вы его отключите. – GillesC

ответ

0

Я думаю console.log($scope.cards); пробегов до того $scope.cards загружен с данными.

Добавить console.log($scope.cards); с угловыми js $scope.$watch для просмотра данных.

Если вы хотите запустить любой код после $scope.cards, загруженного данными, добавьте этот код в пределах $scope.$watch.

0

Это происходит потому, что асинхронное поведение функций и из-за этого

console.log($scope.cards); 

CALLL до результата

firebase.database()

Смежные вопросы