2014-03-07 31 views
4

我試圖做表單驗證與角內的表單驗證。問題是我的表單的輸入是在ng-reapeat內,並且它們具有相同的名稱。因此,如果一個必填字段未填寫,其他字段也顯示爲無效。angularjs:NG-重複

要解決這個問題,我使用瞭如下所示的內部ng表單。但驗證不會被觸發。

任何想法我做錯了什麼?

<form name="referenceForm" > 

     <table> 

<tbody ng-repeat="ref in vm.references | filter:{type: 'ReferenceUrl'}"> 
         <ng-form name="urlForm"> 
          <tr> 
           <td> 
            <input name="urlName" type="text" ng-model="ref.reference.urlName" ng-disabled="ref.reference.isScreenDeleted" required /> 
            <span ng-show="urlForm.urlName.$error.required">*</span> 
           </td> 
           <td> 
            <input name="shortName" type="text" ng-model="ref.reference.shortName" ng-disabled="ref.reference.isScreenDeleted" required /> 
            <span ng-show="urlForm.shortName.$error.required">*</span> 
           </td> 
           <td> 
            <a class="btn grid-button grid-edit-row btn-danger" ng-if="!ref.reference.isScreenDeleted" ng-click="toggleDelete(ref.reference)"><i class="fa fa-trash-o"></i></a> 
            <a class="btn grid-button grid-edit-row btn-info" ng-if="ref.reference.isScreenDeleted" ng-click="toggleDelete(ref.reference)"><i class="fa fa-refresh"></i></a> 
           </td> 
          </tr> 
         </ng-form> 
        </tbody> 
      </table> 

</form> 

回答

12

這是不是一個好主意,把東西放在不在裏面的表。 從來不知道它是如何工作的。

將ng-form作爲屬性放在標籤上。

所以,你應該更換此:

<tbody ng-repeat="ref in vm.references | filter:{type: 'ReferenceUrl'}"> 
    <ng-form name="urlForm"> 

有了這個:

<tbody ng-repeat="ref in vm.references | filter:{type: 'ReferenceUrl'}" ng-form="urlForm"> 
+0

大,是工作!非常感謝。事實上,當放置在TBODY內的NG-形式未被賦予... – Sam

+0

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

+0

它的工作原理!此外,還有一件事我與此代碼注意到,對於每一行urlForm是局部變量,所以你並不需要追加$指數爲每一行獲取表單名稱,驗證! –