Angularjs 函数外的作用域长度

Angularjs scope length outside function

我是 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 的经典问题,您需要为此使用 promises。 这意味着您应该在 promise 回调中编写在 onUsers 之外执行的代码。

读这个:https://docs.angularjs.org/api/ng/service/$q

因为 angular 代码异步运行,所以 console.log($scope.users.length) 在 promise 返回之前运行。

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

你的 console.log($scope.users.length) 在上面的函数中工作,因为它是一个成功的处理程序。 您可以使用 $timeout 让您的 console.log 在成功处理程序之外工作。我假设在 5000 之后你的回复会到达。

  $timeout(function() {
    console.log($scope.users.length);
  }, 5000);

您可以使用 $scope.$watch 作为 运行 变量变化时的函数。

$scope.$watch('users', function(users) {
    console.log(users.length);
});