2013-10-12 68 views
0

更新:我已經更新了牙套amgularjs + jQuery的:foreach循環亙古不退出正確

我有驗證方法保存。還有之前,foreach循環執行,應返回布爾標誌,如果一個條件的滿足,並應退出

$.each($scope.vacationSummaries, function (i, v) 
    { 
    if (Number($scope.vacationRequest.VacationType.Id) == Number(v.VacationType.Id)) 
     { 
     if (v.Remaining > 0) 
     return true; //for returning a true flag for save 
     } 
    return false; // for exiting for each loop 
    }); 

..但它返回false標誌保存,而不是從退出每個

我該怎麼做是正確的?

回答

1

:你糾正你的代碼

編輯後,所以你的問題是,你想要返回true,如果條件都if語句匹配。這在$ .each循環中不起作用,因爲循環只是將該函數作爲集合中每個項目的回調函數運行。

它基本上是一樣的,如果你將有

for(var key in $scope.vacationSummaries){ 
    var v = $scope.vacationSummaries[key]; 
    ... 
} 

在每個循環不能使用的回報。

相反,您將不得不對某個對象實例v做一些事情。如果您想標記某些內容,請在開始循環之前定義一個變量並指定true或false。只需在循環中標記一個對象即可。或者,如果你想要做的事與對象,調用另一個函數...

一些例子:

var flag=false; 
$.each($scope.vacationSummaries, function (i, v) 
{ 
    if (Number($scope.vacationRequest.VacationType.Id) == Number(v.VacationType.Id)) 
    { 
     if (v.Remaining > 0) { 
      flag = true; //assigning flag which can be used after the loop? 
      save(v); // call a method which does something with v? 
     } 
    } 
    return false; // for exiting for each loop 
}); 

老實說,我並不確切地知道你想要實現的,因爲我只能看到這個小東西你的代碼的一部分;) 簡單地認爲$。每個方法的,如果它會正常在C#或JavaScript和每個環路實現邏輯相應

+0

不,它不工作要麼,返回false工作罰款,但返回真正的不給真正的國旗... – neeraj

+0

在每個循環內返回不起作用,就好像你會從某個函數返回某些東西。返回false將打破循環,只返回false,只是繼續循環,這使得它有點過時 – MichaC

+0

是的,我同意,但它有什麼?在foreach循環中獲得真正的標誌? ....就像也有簡單的驗證應用像if($ scope.vacationRequest.VacationType == null)return false; ...它只是發送虛假標誌保存,我們可以在foreach循環中執行嗎? – neeraj

0
$scope.vacations = function() { 
    var check = false; 

    angular.forEach($scope.vacationSummaries,function(v,i) { 
    if (Number($scope.vacationRequest.VacationType.Id) == Number(v.VacationType.Id)) { 
      if (v.Remaining > 0) { 
      check = true; //for returning a true flag for save 
      } 
    } else { 
     check = false; // for exiting for each loop 
    } 
    }); 

    return check; 

}