Chapter 5: Working with AngularJS forms

HTML

<script src="https://code.angularjs.org/1.3.2/angular.min.js"></script>
<div ng-app="myApp">
    <form novalidate name="myform">
        <input type="number" 
        ensure-prime name="myinput" 
        ng-model="formdata.myinput" 
        required />
    </form>
    <div ng-show="myform.myinput.$invalid">
        Input field must be a prime number
    </div>
</div>

JavaScript

angular.module('myApp', [])
.directive('ensurePrime', function() {
    return {
        require: 'ngModel',
        link: function(scope, element, attrs, ctrl) {
            function isPrime(n) {
                if (n<2) {
                    return false;
                }
                
                var m = Math.sqrt(n);
                
                for (var i=2; i<=m; i++) {
                    if (n%i === 0) {
                        return false;
                    }
                }
                return true;
            }
            
            scope.$watch(attrs.ngModel, function(newval) {
            		t
                if (isPrime(newval)) {
                    ctrl.$setValidity('prime', true);
                }
                else {
                    ctrl.$setValidity('prime', false);
                }
            });
        }
    };
});