2015-04-05 54 views
1

一直試圖說唱我的頭這一整天。希望有一些新的眼睛可以得到它!Angular.forEach隻影響最後一行

基本上我有一個範圍:gridOrder其中包含(ProdID:& Quantity :)。我正在使用產品ID從DB獲取數據(數量爲&預留數量)。

然後,我將它傳遞給一個計算某些數據的函數,並將所需數據添加到名爲prodOrder []的另一個作用域。 prodOrder被賦予與等價的gridOrder相同的索引(即,如果創建了gridOrder [2],則創建prodOrder [2])。

這一切工作正常,如果我按時間順序工作,如gridOrder [0],然後gridOrder [1]但如果我在gridOrder [x]並返回到gridOrder [xa](a> 1)它不會更新gridOrder [xa]上的值。

如果有人可以提供任何見解,將不勝感激。

代碼現在工作

$scope.reservedStockFunction = function(){ 
     angular.forEach($scope.gridOrder, function(value, key){ 
      $scope.rvalue = value; 
      $scope.rkey = key; 
      console.log(value);console.log(key); 
      //Check stock. 
      var reservedStockRequest = {prodID: value.prodID, prod_quantity: "", prod_reserved_quantity: "", table: "products"}; 
      //Send requst 
      search_given_where.request(reservedStockRequest).success(function(data){ 
       updValues(data, key, value); 
      }); 
     }); 
     function updValues(data, key, value){ 
      console.log(data); 
      var i = key; 
      if (typeof $scope.prodOrder[i] == "undefined" || !($scope.prodOrder[i] instanceof Array)) { 
       $scope.prodOrder[i] = {}; 
      }   
      //Set Quantity variable. 
      if (value.quantity !== undefined){ 
       var qty = value.quantity; 
      } else { 
       var qty = 0; 
      } 
      //Set Product Quanity Variable. 
      var prodQty = data[0].prod_quantity; 
      //Set Reserved Product Quantity variable. 
      var prodRsvdQty = data[0].prod_reserved_quantity; 
      //Reserved quantity = current reserved quantity + quantity. 
      prodRsvdQty = +prodRsvdQty + +qty; 
      //If reserved quantity is greater than stock. 
      if(prodRsvdQty > prodQty){ 
       var reservedStockMessage = "Product:" + value.prodID + " Stock:" + prodQty + " Reserved Stock:" + prodRsvdQty; 
       //Let user know. 
       $scope.reservedStockMessage[i] = {}; 
       $scope.reservedStockMessage[i].message = reservedStockMessage; 
       //Show reserved stock options. 
       $scope.reservedStock.show = true; 
       //Create array to update product table. 
       $scope.prodOrder[i].prodID= value.prodID; 
       $scope.prodOrder[i].prod_reserved_quantity = prodRsvdQty; 
       $scope.prodOrder[i].reserved = 1; 
       //Set reserved on gridOrder array. 
       value.reserved="1"; 
       data = null; 
       key = null; 
       value = null; 
       qty = null; 
       prodQty = null; 
       prodRsvdQty = null; 
      //If not. 
      } else if (prodRsvdQty < prodQty){ 
       $scope.reservedStockMessage[i] = {}; 
       //Create array to update product table. 
       $scope.prodOrder[i].prodID= value.prodID; 
       $scope.prodOrder[i].prod_reserved_quantity = prodRsvdQty; 
       $scope.prodOrder[i].reserved = 0; 
       //Set Reserved on gridOrder array. 
       value.reserved="0"; 
       data = null; 
       key = null; 
       value = null; 
       qty = null; 
       prodQty = null; 
       prodRsvdQty = null; 
      } 
     }; 
    }; 

回答

1

喬希,你用錯了回調updValues的參數。

你能嘗試使用:

search_given_where.request(reservedStockRequest).success(function(data){ 
    updValues(data, key, value); 
}); 

從鍵和值使用範圍的值。

+0

令人驚歎的,我試過這個無濟於事,再次嘗試在您的要求下,所有的都是完美的!謝謝!!! – 2015-04-06 13:36:30

+0

不客氣。如果你需要,你可以閱讀關於JavaScript閉包:http://www.sitepoint.com/javascript-closures-demystified/,特別是關於循環的關閉問題。 – 2015-04-06 13:52:51

+0

乾杯,我會看看。 – 2015-04-06 14:45:25