Как использовать поля ввода 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);
};
});
Регулярное выражение заимствовано из здесь