Я новичок в AngularJs и не знаю, как получить длину ответа вне функции.
var onUsers = function(response){
$scope.users = response.data;
console.log($scope.users.length); //here works
}
Но когда я пытаюсь использовать функцию onUsers
console.log($scope.users.length);
Я получаю сообщение об ошибке.
Я думаю, проблема в том, что вы пытаетесь получить доступ к $ scope.users.length до того, как ваш ответ вернется с сервера. поэтому $ scope.users все еще не определено. Это классическая проблема асинхронного javascript, и вам нужно использовать обещания для этого. Это означает, что вы должны написать код, который вы выполняете за пределами onUsers, в обратном вызове с обещаниями.
Прочтите это: https://docs.angularjs.org/api/ng/service/ $ q
Вы можете использовать $ scope. $ Watch для запуска функции при изменении переменной.
$scope.$watch('users', function(users) {
console.log(users.length);
});
AS угловой код работает асинхронно, поэтому console.log($scope.users.length)
запускается до возврата обещания.
var onUsers = function(response){
$scope.users = response.data;
console.log($scope.users.length); //here works
}
ваш console.log($scope.users.length)
в вышеприведенной функции работает, потому что это обработчик успеха. вы можете получить, что ваш console.log работает с обработчиком успеха, используя $timeout
. я предполагаю, что после 5000 ваш ответ будет активным.
$timeout(function() {
console.log($scope.users.length);
}, 5000);
console.log($scope.users)
?$scope.users
доступ к$scope.users
до того, как ему будет назначенresponse.data
.$http
возвращает Promise, поэтому вам необходимо получить доступ к данным после разрешения Promise.