dpjayasekara
4/1/2017 - 11:30 AM

validator-directive.js

(function () {
    angular.module('myformApp')
        .directive('nameValidator', function () {
            return {
                restrict: 'A',
                require: 'ngModel',
                link: function (scope, element, attrs, model) {
                    function validateName(name) {
                        let errors = [];
                        if (!name){
                            errors.push('required');
                            return errors;
                        }
                        if (name.length < 2){
                            errors.push('min_length');
                        }
                        if (!/^[a-zA-Z ]+$/.test(name)) {
                            errors.push('invalid_chars');
                        }
                        return errors;
                    }
                  
                    function setValidity(errors) {
                        Object.keys(model.$error).forEach((k) => model.$setValidity(k, true));
                        errors.forEach((val) => model.$setValidity(val, false));
                    }

                    model.$parsers.unshift(function (viewValue) {
                        setValidity(validateName(viewValue));
                        return viewValue;
                    });

                    model.$formatters.unshift(function (modelValue) {
                        setValidity(validateName(modelValue));
                        return modelValue;
                    });
                }
            }
        });
})();