I am trying to check a set of checkboxes and a set of radio stations and show error messages using the ng-messages directive, but it does not work as expected. NG messages do not display an error message at all. I fill out error messages using the html file. Until the errors are resolved, the submit button will be disabled in my form.
How can I show error messages for the checkbox and radio set when:
Not one option selected in Radio Set?
At least one option is not selected in the set of flags?
Checking the checkbox is checked so that we can check at least 2 or more, etc.
Here is my form:
<form name="userForm" ng-submit="submitForm()" novalidate> <div class="form-group" ng-class="{ 'has-error' : userForm.subscribe.$invalid && !userForm.subscribe.$touched }"> <label class="checkbox-inline"> <input type="checkbox" id="subscribe1" value="option1" name="subscribe[]" ng-model="user.subscribe" required> 1 </label> <label class="checkbox-inline"> <input type="checkbox" id="subscribe2" value="option2" name="subscribe[]" ng-model="user.subscribe" required> 2 </label> <label class="checkbox-inline"> <input type="checkbox" id="subscribe3" value="option3" name="subscribe[]" ng-model="user.subscribe" required> 3 </label> <div class="help-block" ng-messages="userForm.subscribe.$error" ng-show="userForm.subscribe.$invalid"> <div ng-messages-include="home/messages.html"></div> </div> </div> <div class="form-group" ng-class="{ 'has-error' : userForm.gender.$invalid && !userForm.gender.$touched }"> <div class="radio"> <label> <input type="radio" name="gender" value="male" ng-model="user.gender" /> male </label> </div> <div class="radio"> <label> <input type="radio" name="gender" value="female" ng-model="user.gender" /> female </label> </div> <div class="help-block" ng-messages="userForm.gender.$error" ng-show="userForm.gender.$invalid"> <div ng-messages-include="home/messages.html"></div> </div> </div> <button type="submit" class="btn btn-primary btn-success " ng-disabled="userForm.$invalid">Submit</button> </form>
messages.html
<span ng-message="required">This field is required</span> <span ng-message="minlength">This field is too short</span> <span ng-message="maxlength">This field is too long</span> <span ng-message="required">This field is required</span> <span ng-message="email">This needs to be a valid email</span>
controller.js
angular.module('myApp', ['ngRoute', 'ngAnimate', 'ngMessages']); angular .module('myApp') .controller('HomeCtrl', HomeCtrl); HomeCtrl.$inject = ['$scope']; function HomeCtrl($scope) { $scope.userForm = {}; }
Set of checkboxes for payment:
<div class="form-group" ng-class="{ 'has-error' : userForm.payment.$invalid && userForm.payment.$touched }"> <label class="checkbox-inline"> <input type="checkbox" id="payment1" value="Visa" name="payment" ng-blur="doTouched()" ng-model="user.payment[1]" ng-required="!someSelected(user.payment)"> Visa </label> <label class="checkbox-inline"> <input type="checkbox" id="payment2" value="Mastercard" name="payment" ng-blur="doTouched()" ng-model="user.payment[2]" ng-required="!someSelected(user.payment)"> Mastercard </label> <label class="checkbox-inline"> <input type="checkbox" id="payment3" value="Cash" name="payment" ng-blur="doTouched()" ng-model="user.payment[3]" ng-required="!someSelected(user.payment)"> Cash </label> <div class="help-block" ng-messages="userForm.payment.$error" ng-show="userForm.payment.$invalid && userForm.payment.$touched"> <div ng-messages-include="home/messages.html"></div> </div> </div>
source share