在AngularJS中,$parsers和$validators都可以用来验证表单。我想知道使用$parser和使用$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);
}
}
}
}它们都做同样的事情,但是什么时候使用解析器是正确的,何时使用验证器是正确的呢?两者的优点是什么?有什么不同吗?
发布于 2015-06-25 00:13:59
$parsers在管道中运行,以转换输入值。如果无法解析输入,则可以返回undefined,这表示解析错误。如果输入值无法解析,则不会运行验证器。
$validators在解析值上在解析器之后运行。它们可以返回false以指示数据错误。
基本上
例如,考虑一个需要正数的模型。$parsers可以对值调用parseFloat,$validators可以检查值是否为正。
举个例子,我认为$validators更合适(也更干净)。
https://stackoverflow.com/questions/31029756
复制相似问题