Длина поля Angularjs вне функции

0

Я новичок в AngularJs и не знаю, как получить длину ответа вне функции.

  var onUsers = function(response){               
  $scope.users = response.data;      
  console.log($scope.users.length);  //here works
  }

Но когда я пытаюсь использовать функцию onUsers

 console.log($scope.users.length);

Я получаю сообщение об ошибке.

  • 0
    Вы получаете что-нибудь с console.log($scope.users) ?
  • 0
    Вы $scope.users доступ к $scope.users до того, как ему будет назначен response.data . $http возвращает Promise, поэтому вам необходимо получить доступ к данным после разрешения Promise.
Показать ещё 2 комментария
Теги:
angularjs-scope
angularjs-controller

3 ответа

1
Лучший ответ

Я думаю, проблема в том, что вы пытаетесь получить доступ к $ scope.users.length до того, как ваш ответ вернется с сервера. поэтому $ scope.users все еще не определено. Это классическая проблема асинхронного javascript, и вам нужно использовать обещания для этого. Это означает, что вы должны написать код, который вы выполняете за пределами onUsers, в обратном вызове с обещаниями.

Прочтите это: https://docs.angularjs.org/api/ng/service/ $ q

  • 0
    Да, я пытался получить это до ответа. Спасибо за подробное объяснение!
1

Вы можете использовать $ scope. $ Watch для запуска функции при изменении переменной.

$scope.$watch('users', function(users) {
    console.log(users.length);
});
  • 0
    Спасибо за ваш ответ, я приму его к сведению.
0

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);
  • 0
    Да, это тоже другое решение, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню