如何在控制器内部使用Angular输入字段电子邮件验证?

时间:2014-03-26 12:15:54

标签: angularjs angularjs-filter

我正在尝试将变量验证为Angular控制器中的电子邮件。

var valid = $filter('email')($scope.email);

电子邮件过滤器不存在,会生成“未知提供程序错误”。从控制器内部访问电子邮件验证的正确方法是什么?

感谢。

稍后编辑:不要让我创建自定义过滤器,它必须是使用角度验证的方式。

3 个答案:

答案 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}}

验证的重点是阻止提交和显示错误消息。我认为在那里完成它而不是处理业务逻辑的控制器就足够了。

DEMO

答案 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