2014-03-25 44 views
4

我很難讓驗證工作使用ng-repeat語句。我有以下代碼。當name字段爲空時,我只想將has-error添加到div.form-group中。我似乎無法得到它的工作。有什麼想法嗎?ng重複中的角度驗證不起作用

My Attempt in fiddler

<div ng-app="app" ng-controller="bookController"> 
    <form name="myForm" ng-submit="submitMe(this)" novalidate> 
     <table class="table"> 
      <tr ng-repeat="order in orders"> 
       <ng-form name="innerForm"> 
       <td>{{ order.id }}</td> 
       <td> 
        <div class="form-group" ng-class="{ 'has-error' : innerForm.name.$invalid && submitted }"> 
         <input type="input" ng-model="order.name" name="name" required /> 
        </div> 
       </td> 
       </ng-form> 
      </tr> 
     </table> 
     <input type="submit" value="submit" ng-click="submitted = true" /> 
    </form> 

    <pre> 
     {{ orders | json }} 
    </pre> 

</div> 


var app = angular.module("app", []); 

app.controller("bookController", function ($scope) { 

    $scope.submitMe = function(form) { 
     console.log(form); 
    }; 

    $scope.orders = [{ 
     id: 1, 
     name: '' 
    }, { 
     id: 2, 
     name: 'hat' 
    }]; 

}); 
+0

是否有嵌套NG-形式的原因? –

+1

因爲您無法動態生成表單輸入元素的「名稱」屬性,他需要驗證http://docs.angularjs.org/api/ng/directive/form。另見http://stackoverflow.com/questions/12044277/how-to-validate-inputs-dynamically-created-using-ng-repeat-ng-show-angular – jbll

回答

8

移動的ngForm指令元素包含ngRepeat指令:

<tr ng-repeat="order in orders" ng-form="innerForm"> 

演示:http://jsfiddle.net/YTR95/

+0

在角1.3.15,我不能得到這個工作。 ng-form在使用這種方式時不會選取父窗體。我之前在表格中使用過它,但這不起作用。 –