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

标签 javascript angularjs asynchronous

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

$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 填充了一组相同的值。这是最后推送的值,重复 something.length 次。

如果我想从回调中修改作用域对象,我应该如何处理它们?

最佳答案

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)
   }
}

关于javascript - 如何从 Angular 回调中更改范围对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37132921/

相关文章:

javascript - 元素 slider 从 0 开始到底部(负)而不是 0 到 Firefox 中的顶部

javascript - 想要用javascript替换字符串中的对象标签

javascript - 如何使用ng-repeat循环遍历对象内的数组

html - 如何使 angular-sanitize 不从 html 中删除 iframe 标签

javascript - Angular JS。将 div 隐藏在 ng-repeat 中

c# - CPU/IO密集型异步任务(mysql数据库连接失败)

javascript - 我怎样才能让这个 javascript 函数发出一个换行符

angularjs - Angular-seed 是事实上的空项目吗?

c# - EndReceive 永远不会返回 0,你怎么知道数据包在 tcp/ip 中何时完成?

c# - C#异步套接字不会返回整页