В AngularJS для проверки форм могут использоваться как $ parsers, так и $ validators. Мне было интересно, в чем разница между использованием парсера $ и использованием $ validator.
Давайте посмотрим на следующем примере:
проверки с использованием парсер
angular.module("myFormApp")
.directive("containsWhiteSpace", containsWhiteSpace);
function containsWhiteSpace() {
function hasWhiteSpace(s) {
return s.indexOf(' ') >= 0;
}
return {
require: "ngModel",
link: function(scope, ele, attrs, ctrl){
ctrl.$parsers.unshift(function(value) {
if(value){
var isValid = !hasWhiteSpace(value);
ctrl.$setValidity('hasWhiteSpace', isValid);
}
return isValid ? value : undefined;
});
}
}
}
Проверка с помощью валидатора
angular.module("myFormApp")
.directive("containsWhiteSpace", containsWhiteSpace);
function containsWhiteSpace() {
function hasWhiteSpace(s) {
return s.indexOf(' ') >= 0;
}
return {
require: "ngModel",
link: function(scope, ele, attrs, ctrl){
ctrl.$validators.hasWhiteSpace = function(value){
return !hasWhiteSpace(value);
}
}
}
}
Они оба делают то же самое, но когда правильно ли использовать синтаксический анализатор и когда правильно использовать валидатор? В чем преимущества обоих? Каковы различия?
$ validators был введен только в 1.3+, тогда как если вы используете <1.2, то вы используете $ parsers – gerl