Валидацию инпутов стоит делать только через директивы зависящие от ngModel. Например как-то так:
angular.module('validators', [])
.directive('maxlength', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function ($scope, $el, attrs, ngModelCtrl) {
ngModelCtrl.$parsers.unshift(validator);
ngModelCtrl.$formatters.unshift(validator);
function validator (value) {
if (value.length > attrs.maxlength) {
ngModelCtrl.$setValididy(false, 'maxlength')
}
return value;
}
}
}
})
Пример не рабочий но должен объяснить суть. Чем это выгодно? Реюзабельность повышается в разы, не нужно городить свои велосипеды, одновременно все привязывается к скоупу и можно проверять валидность полей обращаясь к свойству $valid как у самого поля так и у формы целиком.
Вообще все что касается какой-бы то ни было работы с DOM должно быть вынесено в директивы. а onchange и ngModel нужен только для контроллера или других директив.