我正在尝试覆盖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>
我的代码验证到@符号,然后它似乎不关心@符号后面的内容。我可以采取什么方法来解决这个问题?
答案 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