Angularjs 表单验证
Angularjs form vaidation
我的页面上有一个联系人列表,每个联系人都显示在 <input>
字段中(它们都在 <form>
元素中。当我单击一个字段并对其进行编辑时,我想要一些验证 - 例如,如果该字段不为空,我想给这个字段一个红色 BG and/or 在这个确切字段下面显示一条消息。所以我试过这个:
<form name="contactsForm" ng-submit="update()" novalidate>
<tr class="row">
<td colspan="2">
<input type="text" class="form-control" placeholder="Search for contact" ng-model="filter.userSearch"/>
<button class="btn btn-primary btn-sm btn-delete" ng-click="clearSearchField()"></button>
</td>
<td>
<button class="btn btn-warning" ng-click="toggleNewContact()">Add User</button>
<button type="submit" class="btn btn-danger">Update</button>
</td>
</tr>
<tr class="row" ng-if="addNewContact" ng-repeat="new in newContacts">
<td><input type="text" class="col-md-12 form-control" ng-model="new.en_name"></td>
<td><input type="text" class="col-md-12 form-control" ng-model="new.email"></td>
<td>
<button ng-click="addMore()" class="btn btn-sm btn-success glyphicon glyphicon-plus"></button>
<button ng-click="addLess(new)" class="btn btn-sm btn-danger glyphicon glyphicon-minus"></button>
</td>
</tr>
<tr class="row" ng-repeat="contact in contactList | filter:filter.userSearch track by $index">
<td class="form-group" ng-class="{ 'has-error' : contactsForm.en_name.$invalid && !contactsForm.en_name.$pristine }">
<input type="text" class="col-md-12 form-control" ng-model="contact.en_name" name="en_name" required>
<p ng-show="contactsForm.en_name.$invalid && !contactsForm.en_name.$pristine" class="help-block">Name in English is required.</p>
</td>
<td>
<input type="text" class="col-md-12 form-control" ng-model="contact.email" name="{{contact.email}}" required>
</td>
</tr>
</form>
那没有用,我没有看到任何消息。我也试过这个:
<input type="text" class="col-md-12 form-control" ng-model="contact.en_name" name="{{contact.en_name}}" required>
但我不知道如何将此部分 name="{{contact.en_name}}"
连接到此 <p ng-show="contactsForm.en_name.$invalid && !contactsForm.en_name.$pristine"
。
我也试过使用 $index
作为名字:
<td class="form-group" ng-class="{ 'has-error' : contactsForm.$index.$invalid && !contactsForm.$index.$pristine }">
<input type="text" class="col-md-12 form-control" ng-model="contact.en_name" name="{{$index}}" required>
<p ng-show="contactsForm.$index.$invalid && !contactsForm.$index.$pristine" class="help-block">Name in English is required.</p>
</td>
但这也不起作用 - 我没有看到任何错误消息。
我哪里做错了,我该如何让它发挥作用?
问题是 ng-repeat
中的所有输入字段都具有相同的名称属性(因此它们都指向表单对象中的相同 name
),因此您需要以某种方式将每个名称属性设置为是独一无二的。您可以使用 $index
使其独一无二。
标记
<td class="form-group" ng-class="{ 'has-error' : contactsForm['en_name'+$index].$invalid && !contactsForm['en_name'+$index].$pristine }">
<input type="text" class="col-md-12 form-control"
ng-model="contact.en_name" ng-attr-name="{{'en_name'+$index}}" required>
<p ng-show="contactsForm['en_name'+$index].$invalid && !contactsForm['en_name'+$index].$pristine"
class="help-block">
Name in English is required.
</p>
</td>
我的页面上有一个联系人列表,每个联系人都显示在 <input>
字段中(它们都在 <form>
元素中。当我单击一个字段并对其进行编辑时,我想要一些验证 - 例如,如果该字段不为空,我想给这个字段一个红色 BG and/or 在这个确切字段下面显示一条消息。所以我试过这个:
<form name="contactsForm" ng-submit="update()" novalidate>
<tr class="row">
<td colspan="2">
<input type="text" class="form-control" placeholder="Search for contact" ng-model="filter.userSearch"/>
<button class="btn btn-primary btn-sm btn-delete" ng-click="clearSearchField()"></button>
</td>
<td>
<button class="btn btn-warning" ng-click="toggleNewContact()">Add User</button>
<button type="submit" class="btn btn-danger">Update</button>
</td>
</tr>
<tr class="row" ng-if="addNewContact" ng-repeat="new in newContacts">
<td><input type="text" class="col-md-12 form-control" ng-model="new.en_name"></td>
<td><input type="text" class="col-md-12 form-control" ng-model="new.email"></td>
<td>
<button ng-click="addMore()" class="btn btn-sm btn-success glyphicon glyphicon-plus"></button>
<button ng-click="addLess(new)" class="btn btn-sm btn-danger glyphicon glyphicon-minus"></button>
</td>
</tr>
<tr class="row" ng-repeat="contact in contactList | filter:filter.userSearch track by $index">
<td class="form-group" ng-class="{ 'has-error' : contactsForm.en_name.$invalid && !contactsForm.en_name.$pristine }">
<input type="text" class="col-md-12 form-control" ng-model="contact.en_name" name="en_name" required>
<p ng-show="contactsForm.en_name.$invalid && !contactsForm.en_name.$pristine" class="help-block">Name in English is required.</p>
</td>
<td>
<input type="text" class="col-md-12 form-control" ng-model="contact.email" name="{{contact.email}}" required>
</td>
</tr>
</form>
那没有用,我没有看到任何消息。我也试过这个:
<input type="text" class="col-md-12 form-control" ng-model="contact.en_name" name="{{contact.en_name}}" required>
但我不知道如何将此部分 name="{{contact.en_name}}"
连接到此 <p ng-show="contactsForm.en_name.$invalid && !contactsForm.en_name.$pristine"
。
我也试过使用 $index
作为名字:
<td class="form-group" ng-class="{ 'has-error' : contactsForm.$index.$invalid && !contactsForm.$index.$pristine }">
<input type="text" class="col-md-12 form-control" ng-model="contact.en_name" name="{{$index}}" required>
<p ng-show="contactsForm.$index.$invalid && !contactsForm.$index.$pristine" class="help-block">Name in English is required.</p>
</td>
但这也不起作用 - 我没有看到任何错误消息。
我哪里做错了,我该如何让它发挥作用?
问题是 ng-repeat
中的所有输入字段都具有相同的名称属性(因此它们都指向表单对象中的相同 name
),因此您需要以某种方式将每个名称属性设置为是独一无二的。您可以使用 $index
使其独一无二。
标记
<td class="form-group" ng-class="{ 'has-error' : contactsForm['en_name'+$index].$invalid && !contactsForm['en_name'+$index].$pristine }">
<input type="text" class="col-md-12 form-control"
ng-model="contact.en_name" ng-attr-name="{{'en_name'+$index}}" required>
<p ng-show="contactsForm['en_name'+$index].$invalid && !contactsForm['en_name'+$index].$pristine"
class="help-block">
Name in English is required.
</p>
</td>