2017-01-16 14 views
0

я следующий код:Упорно Scope за просьбу попасть в Угловое

$http({ 
    method: 'GET', 
    url: 'http://localhost:8080/getStuff' 
    }).then(function successCallback(response) { 
     $scope.stuffData= response.data.length; 
    }, function errorCallback(response) { 
    }); 

console.log("amount is:" +$scope.stuffData); 


}); 

В этом случае, мой журнал дает:

amount is:undefined 

Некоторые другие SO вопросы предлагают работает $ объем $ обратиться. чтобы моя область сохранялась. К этому я получаю следующую ошибку:

angular.js:13920 Error: [$rootScope:inprog] $digest already in progress 

Каков правильный способ сохранения моего объема? I.E Каков правильный способ присвоения значений запроса на получение переменной области видимости?

+0

Возможный дубликат [? Как вернуть ответ от асинхронного вызова] (http://stackoverflow.com/questions/14220321/how -do-i-return-the-response-from-a-асинхронный вызов) –

ответ

0

HTTP-вызовы: асинхронный. Ваш console.log, вероятно, называется до, ваше приложение извлекает данные. Когда вызывается console.log, $scope.stuffData еще не определен.

Переместите console.log на номер .then.

$http({ 
    method: 'GET', 
    url: 'http://localhost:8080/getStuff' 
}).then(function successCallback(response) { 
     $scope.stuffData = response.data.length; 
     console.log("amount is:", $scope.stuffData); // <-- It should work 
}, function errorCallback(response) { 
}); 
+0

Это не решает проблему. Я хочу, чтобы результат сохранялся за пределами запроса. –

+0

** Это **. Поскольку вы храните его в '$ scope', попробуйте показать его в HTML. Например: '

{{stuffData}}
'. – Mistalis

+0

@MattBoyle Не могли бы вы еще раз проверить, если решена ваша проблема? – Mistalis

0

HTTP-запросы запускаются асинхронно. Чтобы справиться с этой концепцией, вы должны использовать promises.

Угловые функции обратного вызова для обработки асинхронных HTTP-вызовов.

В вашем случае $scope.stuffData не определено, поскольку console.log работает до того, как http-запрос получает данные в функции обратного вызова .then().

Это будет разрешено, если вы добавили console.log в функцию .then().

+0

Это не решит проблему. Я хочу, чтобы результат сохранялся за пределами запроса. Думаю, как только обещание вернется, я хочу, чтобы это значение было присвоено области? –

+0

Исключительно. Вам необходимо присвоить данные из ответа в своей области. Но этого недостаточно. Ваш 'console.log' запускается ** до того, как будет запущена функция обратного вызова. Вот почему ваша' $ scope.stuffData' не определена. – Korte

0

Консоль.log() выполняется до того, как данные будут восстановлены (HTTP-вызов является асинхронным), поэтому значение еще не определено. Попробуйте проверить значение внутри функции, после успеха:

$http({ 
    method: 'GET', 
    url: 'http://localhost:8080/getStuff' 
    }).then(function successCallback(response) { 
     $scope.stuffData= response.data.length; 
     console.log("amount is:" +$scope.stuffData); 
    }, function errorCallback(response) { 
     console.log("Response error"); 
    }); 
}); 
-1
try with this one please-- 

$http({ 
    method: 'GET', 
    url: 'http://localhost:8080/getStuff' 
    }).then(function successCallback(response) { 
     var obj = JSON.parse(response); 
     $scope.stuffData= obj.data.length; 
     $scope.$apply(); 
     console.log($scope.stuffData); 
    }, function errorCallback(response) { 
    }); 




});