如何在Angular中从回调中更改范围对象?

时间:2016-05-10 08:21:43

标签: javascript angularjs asynchronous

我在范围内有简单的功能,可以多次调用某些服务。我想将检索到的数据附加到范围内的数组中。

$('.example').height(function(i, v) {
   if(v > 30) {
       $(this).css('background', 'green');
   }
});

问题是$scope.foo = function(){ $scope.someArray = []; for(var i = 0; i < something.length; i++){ var name = something[i]; FooService.someMethod($resource, name).then(function (result) { if(result){ $scope.someArray.push(name); } } } } 结果中填充了一组相同的值。它是重复someArray次的最后推送值。

如果我想从回调中修改范围对象,我应该如何处理范围对象?

1 个答案:

答案 0 :(得分:3)

for循环是同步的,因为$http来电不是。

$scope.foo = function(){
   $scope.someArray = [];
   for(var i = 0; i < something.length; i++){
       (function(i){
       var name = something[i];
       FooService.someMethod($resource, name).then(function (result) {
          if(result){
             $scope.someArray.push(name);
          }
       }
      })(i)
   }
}