[英]Override AngularJS Default Email Validator
我想覆盖AngularJS的电子邮件验证程序。 我希望它使用我的自定义字符串来验证电子邮件地址。 我在他们的文档中找到的代码是这样的:JS:
var app = angular.module('registrationApp', []);
app.directive('overwriteEmail', function() {
var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@example\.com$/i;
return {
require: 'ngModel',
restrict: '',
link: function(scope, elm, attrs, ctrl) {
if (ctrl && ctrl.$validators.email) {
// this will overwrite the default Angular email validator
ctrl.$validators.email = function(modelValue) {
return ctrl.$isEmpty(modelValue) || EMAIL_REGEXP.test(modelValue);
}
}
}
}
});
HTML:
<div data-ng-app="registrationApp" data-ng-init="">
<form name="form" class="css-form" novalidate>
<div>
Overwritten Email:
<input type="email" ng-model="myEmail" overwrite-email name="overwrittenEmail" />
<span ng-show="form.overwrittenEmail.$error.email">This email format is invalid! </span><br>
Model: {{myEmail}}
</div>
</form>
</div>
但代码不起作用。 抛出的错误是:
TypeError:无法在N( http://ajax.googleapis.com/ajax/libs/ )读取链接( http:// localhost:63342 / goga_tests / js / registration.js:39:32 )的undefined属性'email'。 angularjs / 1.2.26 / angular.min.js:54:372 )at g( http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:47:256 )at g( http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:47:273 )在N( http://ajax.googleapis.com/ajax/libs/angularjs /1.2.26/angular.min.js:54:313)at g( http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:47:256 ) ( http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:54:313)at g( http://ajax.googleapis.com/ajax/libs/angularjs/ 1.2.26 / angular.min.js:47:256 ) http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:46:377 at http:// ajax .googleapis.com / AJAX /库/ angularjs / 1.2.26 / angular.min.js:18:314
在此先感谢您的帮助!
您正在使用的角度版本1.2.26
不会在ngModel控制器实例上添加$validators
特殊属性。 你需要1.3.x版本的角度。
如果您有1.3.x,您可以按原样使用您的指令,并且您可以将优先级2
添加到大于ng-model(这是1),以便您的指令在ng-model
指令轮到之前设置验证器:
app.directive('overwriteEmail', function() {
var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@example\.com$/i;
return {
require: 'ngModel',
restrict: '',
priority: 2,
link: function(scope, elm, attrs, ctrl) {
if (ctrl && ctrl.$validators.email) {
// this will overwrite the default Angular email validator
ctrl.$validators.email = function(modelValue) {
return ctrl.$isEmpty(modelValue) || EMAIL_REGEXP.test(modelValue);
}
}
}
}
});
演示
var app = angular.module('app', []); app.directive('overwriteEmail', function() { var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@example\\.com$/i; return { require: 'ngModel', restrict: '', priority: 1, link: function(scope, elm, attrs, ctrl) { if (ctrl && ctrl.$validators.email) { // this will overwrite the default Angular email validator ctrl.$validators.email = function(modelValue) { return ctrl.$isEmpty(modelValue) || EMAIL_REGEXP.test(modelValue); } } } } });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script> <div ng-app="app"> <div> <form name="form" class="css-form" novalidate> <div> Overwritten Email: <input type="email" ng-model="myEmail" overwrite-email name="overwrittenEmail" /> <span ng-show="form.overwrittenEmail.$error.email">This email format is invalid! </span> <br>Model: {{myEmail}} </div> </form> </div> </div>
你也可以坚持使用ng-pattern
并使用form.overwrittenEmail.$error.pattern
来显示无效模式的消息。
<input type="email" ng-pattern="/^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@example\.com$/i"
ng-model="myEmail" name="overwrittenEmail" />
<span ng-show="form.overwrittenEmail.$error.pattern">
演示
var app = angular.module('app', []);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="app"> <div> <form name="form" class="css-form" novalidate> <div> Overwritten Email: <input type="email" ng-model="myEmail" ng-pattern="/^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@example\\.com$/i" name="overwrittenEmail" /> <span ng-show="form.overwrittenEmail.$error.pattern">This email format is invalid! </span> <br>Model: {{myEmail}} </div> </form> </div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.