Ng-change не запускается для ввода по электронной почте, если я не введу действующий адрес электронной почты

Значение модели для недействительного ввода электронной почты всегда undefined. Я хотел бы иметь возможность проверить, ввел ли пользователь какой-либо текст (даже если он еще не действительный адрес электронной почты).

Пожалуйста, проверьте plnkr для получения дополнительной информации о реализации: http://plnkr.co/edit/qV2eqGFhPvZSZKexDVF2?p=preview

Html:

<body ng-controller="MainCtrl">
    <form>
      <div>
        <label for="email">Email address</label>
            <input ng-keyup="keyUp()" ng-change="changed()" type="email" name="email" id="email" ng-model='user.email'/>
        </div>
    </form>
  </body>

Контроллер:

    var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.user = {};
  $scope.$watch('user.email', function (val){
      console.log("Watch: "+$scope.user.email);
    });
    $scope.changed = function(){
      console.log("Changed: "+$scope.user.email);
    }
    $scope.keyUp = function(){
      console.log("KeyUp: "+$scope.user.email);
    }
});

Приветствия.

+3
источник поделиться
3 ответа

Вы можете получить значение входного элемента на клавиатуре

$scope.keyUp = function(){
   console.log('value: ', event.target.value)
}
-1
источник

На самом деле есть способ. Вы можете использовать $ViewValue.

Добавьте ng-форму в форму

body ng-controller="MainCtrl">
    <form name="myForm" ng-form="myForm">
      <div>
        <label for="email">Email address</label>
            <input ng-keyup="keyUp()" ng-change="changed()" type="email" name="email" id="email" ng-model='user.email'/>
        </div>
    </form>
  </body>

И затем в контроллере вы сможете получить значение

   var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
$scope.user = {};
    $scope.changed = function(){
      console.log("Changed: "+$scope.myForm.email.$viewValue);
    }
    $scope.keyUp = function(){
      console.log("KeyUp: "+$scope.myForm.email.$viewValue);
    }
});

Вы можете прочитать здесь

+1
источник

Да, как и в случае с дизайном ng-change, сначала оцените выражение (адрес электронной почты или текст), если его действительный он вызовет функцию

Давайте возьмем пример текстового поля.

Поэтому, если в input[text] есть что-либо (любой текст), оно будет действительным и запустит функцию(), но в случае электронной почты оно будет действительным только в том случае, если input[email] является допустимым, что требует некоторой проверки, которая должна быть выполнена, а затем он запустит событие.

То же самое относится к $watch, он будет оценивать значение, применяемое к нему $scope.$watch("user.email"), в этом случае user.email, который будет установлен только в том случае, если input[email] содержит допустимое значение.

ng-keyup будет вызывать всегда на клавиатуре, поэтому он будет вызывать function() в каждом коде.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос