坚持范围超出角度

时间:2017-01-16 15:26:47

标签: angularjs angularjs-scope angularjs-http

我有以下代码:

  $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问题建议运行$ scope。$适用于使我的范围保持不变。对此我收到以下错误:

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

坚持我的范围的正确方法是什么? I.E将get请求的值赋给范围变量的正确方法是什么?

4 个答案:

答案 0 :(得分: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) {
});

答案 1 :(得分:0)

HTTP请求以异步方式运行。为了处理此概念,您必须使用promises

Angular使用回调函数来处理异步HTTP调用。

在您的情况下,$scope.stuffData未定义,因为console.log在http请求获取.then()回调函数中的数据之前运行。

如果您已在console.log函数中添加.then(),则可以解决此问题。

答案 2 :(得分:0)

在检索数据之前执行console.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"); 
    });
});

答案 3 :(得分:-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) {
    });




});