2013-07-15 53 views
0

所以我想驗證ng-repeat中的一個項目的輸入。例如,爲了說明我有5個項目(1,2,3,4,5),我只想驗證表單,如果第4項被選中。ng-repeat中的AngularJS表單驗證

我用NG模式之前驗證形式,而不是一個有一個下拉菜單選擇item.name

我已經包括了我想第4項與NG內部驗證的正則表達式-模式。

<div> 
    <select name="name" ng-model="item.name" ng-options="item for item in items" required></select> 
</div> 

<div> 
    <input name="results" type="text" ng-model="item.results" ng-pattern="/^\d\d\d\/\d\d\d/" required> 
</div> 

有關驗證此情況的正確方法的任何建議將不勝感激。我曾經想過創建一個指令來驗證這個,但是這感覺就像是一個過於複雜的解決方案,因爲我不會在這個應用程序中多次使用該指令。

////////////////////////////////////////////// ////

它不會讓我回答我的問題所以在這裏我找到了答案。

我最終什麼事不得不做的是使用NG模式,並通過它的功能。

<input name="results" type="text" ng-model="vital.results" ng-pattern="vitalRegEx()" required> 

這裏是控制器代碼

$scope.item4RegEx = /^\d{2,3}\/\d{2,3}$/; 

    $scope.itemRegEx = function() { 
    if($scope.item && $scope.item.name === "fourth item") 
     return $scope.item4RegEx; 
    else return (/^$/); 
    }; 
+0

您可以編寫一個指令,在選擇小部件的select或blur事件上執行一個函數。 – mpm

回答

0

否則......

上的選擇下拉它調用一個控制器方法和控制方法

附加NG-改變指令設置一個標誌是否驗證表單或不。

例如。

<select ng-change="checkIfFormShouldbeValidated()" ng-model="item.name"></select> 

// Inside controller 
$scope.checkIfFromShouldBeValidated = function(){ 
    if($scope.item.name == 4th Item) $scope.shouldValidate = true; 
    else $scope.shouldValidate = false; 
}; 


$scope.formSubmit = function(){ 
    if(($scope.shouldValidate && form.$valid) || (!$scope.shouldValidate)){ 
     // Submit Form 
    } 
}; 

看看是否有幫助。

0

我寫了這個遞歸函數我的控制器內檢查所有子作用域的有效性。

function allValid(scope) { 
    var valid = true; 
    if (scope.$$childHead) { 
     valid = valid && allValid(scope.$$childHead); 
    } 
    if (scope.$$nextSibling) { 
     valid = valid && allValid(scope.$$nextSibling); 
    } 
    if (scope.scorePlannerForm) { 
     valid = valid && scope.myForm.$valid; 
    } 
    return valid; 
} 

然後在我的控制器中,我檢查這與控制器範圍。

function formSubmit() { 
     if (allValid($scope)) { 
      // perform save 
     } 
}