我创建了自定义验证器,并将其附加到输入元素的模型上,如下所示:
ngModel.$validators.required = function (value) {
return !!value;
}
而且它不起作用-甚至没有调用函数。但是,将其重命名required
为alsoRequired
-正确调用。
Angular对验证器命名有一些限制吗?
没有足够的代码来确切地了解正在发生的事情,但是我可以猜出您的错误在哪里:
ngModel.$validators
由决定对其进行设置的任何指令设置。例如,带有type="email"
set的输入指令$validators.email
;ng-required
指令集$validators.required
,等等。
您可能已经ng-model
在一个自定义指令上设置了一个,甚至在上也没有设置<input type="text">
,它本身并没有注册验证器。
像您一样,自定义指令可以注册验证器:
link: function(scope, element, attrs, ngModel){
ngModel.$validators.required = function (value) {
console.log(value); // this will fire if parsers do not return undefined
return !!value;
};
})
并且如果与结合使用ng-model
,应该可以正常工作:
<input type="email" ng-model="foo" my-dir>
http://plnkr.co/edit/1oQGRWZ0kWlV6Q7WjvrY?p=预览
要回答您的问题,$validators.required
未调用函数的可能原因是因为您有另一个覆盖该值的指令-例如,ng-required
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句