(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;
});
}
}
});
})();