Angular不会在http请求后更新我的对象

时间:2015-02-13 02:07:23

标签: javascript angularjs

这是我的角度代码:

samirsoftApp.controller("OrderCtrl",function($scope,$http){
$scope.currentStep=1;
$scope.defaultQuantity=1;
$scope.item={};
$scope.getItem = function(){
$http.get('/test/getItemDetails/')
.success(function(data, status, headers, config) {
$scope.$apply(function(){
$scope.item = data;
});
console.log($scope.item);
})
.error(function(data, status, headers, config) {
console.log(data)
});
};
});

当它请求并获得答案时,它不会更新我的项目对象,所以我使用了$ apply并且它不起作用并抛出错误: 错误:[$ rootScope:inprog] http://errors.angularjs.org/1.3.13/ $ rootScope / inprog?p0 =%24digest S /< @ https://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.min.js:6:417 .....

我也试过

$timeout(function() {
$scope.item = data;
}, 0);

而不是$ apply`但它在consol中打印一个空对象

就像这样:

samirsoftApp.controller("OrderCtrl",function($scope,$http,$timeout){
$scope.currentStep=1;
$scope.defaultQuantity=1;
$scope.item={};
$scope.getItem = function(){
$http.get('/test/getItemDetails/')
.success(function(data, status, headers, config) {
$timeout(function() {
$scope.item = data;
}, 0);
console.log($scope.item);
})
.error(function(data, status, headers, config) {
console.log(data)
});
};
});

我应该怎样做才能在http请求后更新我的对象。 感谢

1 个答案:

答案 0 :(得分:2)

您可以分配$http.get()请求返回的数据,如此

  $http.get('/test/getItemDetails/')
    .success(function(data, status, headers, config) {
      $scope.item = data;
      console.log($scope.item);
    })
    .error(function(data, status, headers, config) {
      console.log(data);
    });
  };

$apply无需角度自动更新$scope

我怀疑问题出在您的代码的其他地方

可能:

  • 您定义的function#getItem包含$http请求,但您在哪里调用它?
  • 确保对网址/test/getItemDetails/的调用是
    1. 通过手动浏览或使用POSTMAN等实用程序返回数据。
    2. 使用正确的网址进行调用 - 尝试在developer tools > network中查看 404错误

我已更新您的代码 - 演示此处 - http://jsbin.com/notudebiso/1/edit?html,js,output

(使用$ http调用github api)