AngularJS | Проверить уникальность электронной почты, используя ng-blur и условную переменную

0

Используя ng-blur, я подтверждаю уникальность адреса электронной почты, прежде чем пользователь сможет отправить форму. Я ожидаю, что приведенный ниже код будет показывать только "Этот адрес электронной почты берется", когда он выполняет $http.put и получает 409 (который я подтвердил, отправляется). Во всех остальных случаях переменная mailIsAvailable должна оставаться верной, и я не должен видеть "Этот адрес электронной почты взят". К сожалению, ошибка показывает, посылает ли API 409 или 200.

HTML:

<div class="form-group" ng-class="{'has-error' : signup.email.$invalid && signup.email.$dirty}">

      <div>
        <input type="text" name="email" class="form-control" placeholder="Email" ng-model="signupForm.email" ng-blur="validateEmail()" required>
        <span class="help-block has-error" ng-if="signup.email.$dirty">
          <span ng-show="signup.email.$error.required">Email address is required.</span>
          <span ng-show="signup.email.$error.email">Not a valid email address.</span>
          <span ng-hide="emailIsAvailable">That email address is taken.</span>
        </span>
      </div>
    </div>

контроллер:

  $scope.emailIsAvailable = true;

  $scope.validateEmail = function() {

    var email = $scope.signupForm.email;

    console.log(email);

    if (email === undefined) {
      return;
    } else if (AuthService.validateEmail(email) === true) {
      $scope.emailIsAvailable = true;
      return;
    } else {
      $scope.emailIsAvailable = false;
      return;
    }
  };

Обслуживание:

validateEmail: function (email) {
  return $http.put('/api/user/validateEmail', {
    email : email
  })
  .then(function onSuccess (res) {
    return true;
  })
  .catch(function (res) {
    return false;
  });
}
Теги:

1 ответ

2
Лучший ответ

Функция AuthService.validateEmail возвращает обещание.

Вам нужно будет реорганизовать, как вы это называете.

$scope.emailIsAvailable = true;

$scope.validateEmail = function() {
  var email = $scope.signupForm.email;

  console.log(email);

  if (email === undefined) {
    return;
  } else {
    AuthService.validateEmail(email)
    .then(function onSuccess (res) {
      $scope.emailIsAvailable = true;
    })
    .catch(function (res) {
      $scope.emailIsAvailable = false;
    });
  }
};
  • 0
    Спасибо :) Я не осознавал, что обещание должно быть возвращено полностью.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню