2016-05-10 60 views
2

我有幾個簡單的函數調用某些服務的範圍。我想將檢索到的數據追加到範圍內的數組中。如何從Angular中的回調更改範圍對象?

$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次。

如果我想從回調中修改範圍對象,應該如何處理範圍對象?

+0

你可以顯示「異步回調」嗎? – Satpal

+0

「修改」是什麼意思?你能分享輸入和期望的輸出嗎? –

+0

按特定ID挑選物品並更新它們。你的數據是什麼樣的?如果你提供了關於你的事情是如何設置的信息,那麼它會容易得多,此時這是非常模糊的 – Patrick

回答

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

非常感謝!就是這個。你能給我一些提示來理解它嗎? – Landeeyo

+1

閉包將爲每次迭代創建一個新的作用域。這是關於如何關閉工作的一個偉大的文章... http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – Thalaivar

+1

謝謝你第二次,Thalaivar。 – Landeeyo