Angular 中的受限验证者名称
Restricted validators names in Angular
我创建了自定义验证器并将其附加到输入元素的模型,如:
ngModel.$validators.required = function (value) {
return !!value;
}
而且它不起作用 - 甚至都没有调用函数。然而,将它从 required
重命名为 alsoRequired
- 它被正确调用。
Angular 是否对验证器命名有一些限制?
您可以动态设置必填字段,因为您可以使用 ng-required="expression"
而不是使用验证器。如果 expression
将是 true
,它将有条件地添加 required
属性
没有足够的代码来准确理解发生了什么,但我可以猜到你的错误在哪里:
ngModel.$validators
由决定设置它的任何指令设置。例如,带有 type="email"
的输入指令设置 $validators.email
; ng-required
指令集 $validators.required
,依此类推。
您可能在自定义指令甚至 <input type="text">
上设置了 ng-model
,它本身不会注册验证器。
像你的自定义指令可以注册一个验证器:
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=preview
为了回答您的问题,您的 $validators.required
函数未被调用的可能原因是您有另一个覆盖该值的指令 - 例如,ng-required
.
我创建了自定义验证器并将其附加到输入元素的模型,如:
ngModel.$validators.required = function (value) {
return !!value;
}
而且它不起作用 - 甚至都没有调用函数。然而,将它从 required
重命名为 alsoRequired
- 它被正确调用。
Angular 是否对验证器命名有一些限制?
您可以动态设置必填字段,因为您可以使用 ng-required="expression"
而不是使用验证器。如果 expression
将是 true
required
属性
没有足够的代码来准确理解发生了什么,但我可以猜到你的错误在哪里:
ngModel.$validators
由决定设置它的任何指令设置。例如,带有 type="email"
的输入指令设置 $validators.email
; ng-required
指令集 $validators.required
,依此类推。
您可能在自定义指令甚至 <input type="text">
上设置了 ng-model
,它本身不会注册验证器。
像你的自定义指令可以注册一个验证器:
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=preview
为了回答您的问题,您的 $validators.required
函数未被调用的可能原因是您有另一个覆盖该值的指令 - 例如,ng-required
.