Reputation: 4599
I am doing selectbox validation using ng-messages
, but I am not able to do the required validation.
What could be the problem with my code?
<form name="personalDetailForm" novalidate="">
<label class="item item-input" ng-class="{ 'has-errors' : personalDetailForm.title.$invalid, 'no-errors' : personalDetailForm.title.$valid}">
<span class="input-label">Title:</span>
<select data-ng-model="personalDetObj.title" ng-required="true" name="title">
<option value="">Select title</option>
<option value="Mr">Mr.</option>
<option value="Mrs">Mrs.</option>
</select>
</label>
<div class="error-container" ng-show="personalDetailForm.title.$dirty && personalDetailForm.title.$invalid" ng-messages="personalDetailForm.title.$error">
<div class="error" ng-message="required">
This field is required!
</div>
</div>
</form>
Upvotes: 3
Views: 3788
Reputation: 193291
Part responsible for showing messages should be changed to:
<div class="error-container"
ng-show="personalDetailForm.title.$dirty && personalDetailForm.title.$invalid"
ng-messages="personalDetailForm.title.$error">
<div class="error" ng-message="required">This field is required!</div>
</div>
Pay attention for correct usage of ngMessages
, ngMessage
directives and personalDetailForm.title.$error
expression (not $errors
).
angular.module('demo', ['ngMessages']);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular-messages.js"></script>
<form ng-app="demo" name="personalDetailForm" novalidate="">
<label class="item item-input" ng-class="{'has-errors' : personalDetailForm.title.$invalid, 'no-errors' : personalDetailForm.title.$valid}">
<span class="input-label">Title:</span>
<select data-ng-model="personalDetObj.title" ng-required="true" name="title">
<option value="">Select title</option>
<option value="Mr">Mr.</option>
<option value="Mrs">Mrs.</option>
</select>
</label>
<div class="error-container" ng-show="personalDetailForm.title.$dirty && personalDetailForm.title.$invalid" ng-messages="personalDetailForm.title.$error">
<div class="error" ng-message="required">This field is required!</div>
</div>
</form>
Upvotes: 1