@Jlmcdonald'ın önerdiği şeyi genişleterek bunu çözdüm. Tüm girdi ve seçme öğelerine otomatik olarak uygulanacak bir yönerge oluşturdum:
var blurFocusDirective = function () {
return {
restrict: 'E',
require: '?ngModel',
link: function (scope, elm, attr, ctrl) {
if (!ctrl) {
return;
}
elm.on('focus', function () {
elm.addClass('has-focus');
scope.$apply(function () {
ctrl.hasFocus = true;
});
});
elm.on('blur', function () {
elm.removeClass('has-focus');
elm.addClass('has-visited');
scope.$apply(function () {
ctrl.hasFocus = false;
ctrl.hasVisited = true;
});
});
elm.closest('form').on('submit', function () {
elm.addClass('has-visited');
scope.$apply(function () {
ctrl.hasFocus = false;
ctrl.hasVisited = true;
});
});
}
};
};
app.directive('input', blurFocusDirective);
app.directive('select', blurFocusDirective);
Bu , kullanıcı öğelere odaklandıkça / ziyaret ettikçe çeşitli öğelere ekleyecek has-focus
ve bunları has-visited
sınıflayacaktır. Ardından, doğrulama hatalarını göstermek için bu sınıfları CSS kurallarınıza ekleyebilirsiniz:
input.has-visited.ng-invalid:not(.has-focus) {
background-color: #ffeeee;
}
Bu, öğelerin hala $ geçersiz özellikler vb. Alması durumunda iyi çalışır, ancak CSS, kullanıcıya daha iyi bir deneyim sağlamak için kullanılabilir.