我正在尝试将变量验证为Angular控制器中的电子邮件。
var valid = $filter('email')($scope.email);
电子邮件过滤器不存在,会生成“未知提供程序错误”。从控制器内部访问电子邮件验证的正确方法是什么?
感谢。
稍后编辑:不要让我创建自定义过滤器,它必须是使用角度验证的方式。
答案 0 :(得分:6)
您可以创建隐藏的输入类型电子邮件:
<input type="email" hidden id="emailValidator" required ng-model="x" />
然后在js中将值设置为该输入并检查有效性:
var validator = $('#emailValidator')[0];
validator.value = "someemail@tovalidate.com";
return validator.checkValidity();
此文档也可能有所帮助:https://docs.angularjs.org/guide/forms
答案 1 :(得分:4)
您可以使用表单并通过在提交按钮中添加ng-disabled
来阻止表单提交:
<form name="form">
<input type="email" ng-model="email" name="email" required/>
<button type="submit"
ng-disabled="form.$invalid">Submit</button>
</form>
{{form.email.$valid}}
验证的重点是阻止提交和显示错误消息。我认为在那里完成它而不是处理业务逻辑的控制器就足够了。
答案 2 :(得分:2)
您可以编写自己的过滤器:
angular.module(/**some module description here**/).
filter('email',function(){
var validateEmail = function(email) {
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(email);
}
return function(input){
return validateEmail(input);
};
});
正则表达式来自here