-1

我创建了自定义验证器并将其附加到输入元素的模型中,例如:

ngModel.$validators.required = function (value) {
  return !!value;
}

而且它不起作用 - 甚至没有调用函数。但是将其重命名requiredalsoRequired- 它被正确调用。

Angular 对验证器命名有一些限制吗?

4

2 回答 2

0

您可以动态设置必填字段,以便您可以使用ng-required="expression"而不是使用验证器。如果是的话,它将有条件地添加required属性expressiontrue

于 2015-03-31T07:21:18.220 回答
0

没有足够的代码来准确理解发生了什么,但我可以猜到你的错误在哪里:

ngModel.$validators由决定设置它的任何指令设置。例如,带有type="email"sets的输入指令$validators.emailng-required指令集$validators.required,等等。

您可能已经ng-model设置了自定义指令,甚至设置了 on <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=preview

要回答您的问题,未调用您的函数的可能原因$validators.required是因为您有另一个指令覆盖此值 - 例如,ng-required.

于 2015-03-31T07:37:37.857 回答