Angular中受限制的验证器名称

时间:2015-03-31 07:16:10

标签: angularjs angularjs-validation

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

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

它不起作用 - 甚至没有调用函数。无论如何将其从required重命名为alsoRequired - 都会被正确调用。

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

2 个答案:

答案 0 :(得分:0)

您可以动态设置必填字段,以便您可以使用ng-required="expression"而不是使用验证程序。如果requiredexpression

,则会有条件地添加true属性

答案 1 :(得分:0)

没有足够的代码来准确了解发生了什么,但我猜错了你的位置:

ngModel.$validators由决定设置它的任何指令设置。例如,带有type="email"的输入指令设置$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>

如果与$validators.required结合使用,应该可以正常工作:

ng-required

http://plnkr.co/edit/1oQGRWZ0kWlV6Q7WjvrY?p=preview

要回答您的问题,未调用{{1}}函数的可能原因是您有另一个指令覆盖此值 - 例如{{1}}。