AngularJS不会覆盖内置验证器

时间:2015-03-09 05:07:20

标签: javascript regex angularjs

我正在尝试覆盖AngularJS中的电子邮件验证程序,但我似乎无法让它正常工作。

这是我对JavaScript文件的代码:

var app = angular.module("home", []);


app.directive("overwriteEmail", function() {
var UEMAIL_REGEX = /^[a-z0-9]+@university\.edu$/i;
 return {
   require: "ngModel",
   restrict: "",
   link: function(scope, elm, attrs, ctrl) {
   if (ctrl && ctrl.$validators.email) {
   ctrl.$validators.email = function(modelValue) {
     return ctrl.$isEmpty(modelValue) || UEMAIL_REGEX.test(modelValue);
   };

 }

}
 };


});

对于HTML文件,我有:

<label>University Email Address:</label>
<input type="email" overwrite-email name="uemail" data-ng-model="email" placeholder="University e-mail required" required>
<span class="warning" data-ng-show="regis.uemail.$error.email">Invalid email!</span>

我的代码验证到@符号,然后它似乎不关心@符号后面的内容。我可以采取什么方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用优先级:2,它大于优先级为ng的模型:1 :-)它可能会覆盖电子邮件属性。

app.directive("overwriteEmail", function() {
var UEMAIL_REGEX = /^[a-z0-9]+@university\.edu$/i;
 return {
   require: "ngModel",
   restrict: "",
   priority:2,
   link: function(scope, elm, attrs, ctrl) {
   if (ctrl && ctrl.$validators.email) {
   ctrl.$validators.email = function(modelValue) {
     return ctrl.$isEmpty(modelValue) || UEMAIL_REGEX.test(modelValue);
   };

 }

}
 };

Ps: - 提供1.3.x