Как использовать поля ввода w50> для проверки правильности ввода внутри контроллера?

Я пытаюсь проверить переменную как электронную почту внутри контроллера Angular.

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

Фильтр электронной почты не существует, генерирует "неизвестную ошибку поставщика". Каков правильный способ доступа к проверке подлинности электронной почты внутри контроллера?

Спасибо.

Далее отредактируйте: не ставьте меня на создание настраиваемого фильтра, это должен быть способ с помощью проверки Angular.

Ответ 1

Вы можете создать скрытый тип ввода электронной почты:

<input type="email" hidden id="emailValidator" required ng-model="x" />

Затем в js установите значение для этого ввода и проверьте правильность:

var validator = $('#emailValidator')[0];
validator.value = "[email protected]";

return validator.checkValidity();

Также эта документация может быть полезна: https://docs.angularjs.org/guide/forms

Ответ 2

Вы можете использовать форму и предотвратить отправку формы, добавив 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

Ответ 3

Вы можете написать свой собственный фильтр:

angular.module(/**some module description here**/).
   filter('email',function(){
       var validateEmail = function(email) { 
            var re = /^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\".+\"))@((\[[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); 
       };
   });

Регулярное выражение заимствовано из здесь