2014-01-26 2 views
0

Как я могу условно использовать проверку электронной почты углов на основе наличия другой переменной сферы? Я просмотрел документацию, но единственный способ найти подтверждение электронной почты - использовать input type="email", что в этом случае я не могу использовать из-за зависимости другой директивы от type="text".Угловая условная проверка электронной почты

В идеале я хотел бы либо назначить ng-match = "email" на основе значения другой переменной области видимости, либо просто проконтролировать адрес электронной почты при отправке. В теории я мог бы просто отдельное регулярное выражение для проверки электронной почты, но по возможности я хотел бы использовать проверку Углового, поскольку я использую это везде.

Благодаря

- Edit: Для того, чтобы уточнить, я специально хотел бы использовать проверку родной электронной угловую-х в любом решение, я в конечном итоге использование.

+0

Просто написать пользовательскую директиву, что – Mik378

+0

Да, я знаю, что могу сделать это, но как я могу использовать проверку родной электронной угловую в этой директиве, если идти по этому пути? – jraede

+0

Вы можете установить более высокий ** приоритет ** для своей директивы, чем адрес электронной почты (при условии, что вы обрабатываете свой процесс в функции связывания вашей директивы). Чтобы проверка электронной почты происходила перед процессом вашей настраиваемой директивы. – Mik378

ответ

2

Вы должны использовать ng-required и ng-pattern на поле ввода электронной почты.

<input type="text" ng-model="email" ng-required="emailRequired" ng-pattern="emailPattern" /> 

А затем определить emailPattern как функция на $scope вашего контроллера.

$scope.emailPattern = (function() { 
var regexp = /^(([^<>()[\]\\.,;:\[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 { 
    test: function(value) { 
     if($scope.emailRequired === false) return true; 
     else return regexp.test(value); 
    } 
}; 

})();

Следующая скрипку реализует то, что вы хотите:

http://jsfiddle.net/9SSE4/

+0

Правильно, но не использовать регулярное выражение углов, не копируя его явно? – jraede

+0

Нет, потому что проверка регулярного выражения в угловом регулярном выражении работает только с вводом типа = «электронная почта». – tomepejo

+0

Вы можете попробовать самостоятельно непосредственно на примере документации угла. Здесь: http://jsfiddle.net/5uW2U/ – tomepejo

0

Не могли бы вы изменить тип входа? Если вход должен быть подтвержден как электронная почта, тогда установите его тип на адрес электронной почты, иначе установите его в текст.

<input type="{{vm.type}}" ng-model="vm.text" /> 
<select ng-model="vm.type"> 
    <option>text</option> 
    <option>email</option> 

Example Plunker

Смежные вопросы