Используя 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;
});
}
Функция 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;
});
}
};