2013-07-04 2 views
17

Есть ли что-то особенное с типом ввода = «email» и атрибут ng-model? Если входной адрес электронной почты, то модель не обновляется. Если я изменяю тип ввода на текст, номер или дату, он обновляется правильно.Есть ли ошибка электронной почты ng-модели и ввода типа?

Ошибка или некоторая специальная проверка подлинности электронной почты, которую я не понимаю?

+0

Возможно, вы имеете в виду это http://www.youtube.com/watch?v=ZhfUv0spHCY&t=29m19s? –

+0

, какая версия углового вы используете –

ответ

29

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

Это регулярное выражение, которое используется:

/^[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/ 

В принципе, вам нужно ввести адрес, который, по крайней мере [email protected]

3

Дополнением, вы можете использовать свойства на вас форму, чтобы увидеть, если ваш адрес электронной почты действительно, как это:

HTML:

<form name="myForm" ng-submit="submit()"> 
    <input type="email" ng-model="email1" name="email1" /> 
</form> 

Javascript:

//[formName].[inputFieldName].property 
myForm.email1.$pristine; 
// Boolean. True if the user has not yet modified the form. 
myForm.email1.$dirty 
// Boolean. True if the user has already modified the form. 
myForm.email1.$valid 
// Boolean.True if the the form passes the validation. 
myForm.email1.$invalid 
// Boolean. True if the the form doesn't pass the validation. 
myForm.email1.$error 

Reference

2

Начиная с угловыми 1.3, вы можете легко переписать 'электронная почта' валидатор и сделать это всегда возвращает истину.

angular 
 
    .module('myApp', []) 
 
    .controller('MainController', function() { 
 
    this.email = ''; 
 
    }) 
 
    .directive('noEmailValidation', function() { 
 
    return { 
 
     restrict: 'A', 
 
     require: 'ngModel', 
 
     link: function(scope, elm, attr, ctrl) { 
 
     ctrl.$validators['email'] = function() { 
 
      return true; 
 
     }; 
 
     } 
 
    } 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"></script> 
 
<div ng-app="myApp"> 
 
    <form ng-controller="MainController as main"> 
 
    <div>Email: {{main.email}}</div> 
 
    <input type="email" ng-model="main.email" no-email-validation> 
 
    </form> 
 
</div>

Наслаждайтесь.

11

Это не ошибка, это обновление только при вводе правильного формата адреса электронной почты для проверки подлинности электронной почты. Добавьте этот атрибут ng-model-options="{'allowInvalid': true}", чтобы разрешить недействительный ввод электронной почты.

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