Я создаю форму регистрации в Угловом с тремя входами: email
, password
и passwordConfirm
. Мой контроллер выглядит следующим образом:
app.controller('SignupController', function ($scope, User) {
$scope.user = {};
$scope.signup = function() {
User.save($scope.user, function(success) {
// TODO
}, function(error) {
if (error.status === 422) {
error.data.errors.forEach(function(item) {
$scope.signupForm[item.field].$setValidity(item.error, false);
});
}
});
};
});
Что это делает, посылая запрос на мой API, когда пользователь отправляет форму, чтобы зарегистрировать себя. Если возвращается ответ 422
(что означает ошибки проверки), я прокручиваю их и устанавливаю соответствующие входы на недопустимые данные в зависимости от возвращаемого API.
Давайте рассмотрим пример зарегистрированного адреса электронной почты. Я показываю ошибку проверки на мой взгляд, как это:
<small class="error" ng-show="signupForm.email.$error.exists">Email address taken, please use another</small>
Это все работает отлично, но мой пользователь теперь застрял, потому что, когда они пытаются изменить адрес электронной почты на другой, справедливость email
поля ISN» t, чтобы они могли повторно отправить форму (я отключу кнопку отправки на основании действительности формы).
В принципе, мне нужно свойство проверки (в данном случае exists
), которое будет сброшено до true
после того, как пользователь изменит модель ввода. Каков наилучший способ для меня сделать это?
Edit: Небольшой мозговолна ударил меня после публикации, я добавил это в мой контроллер:
$scope.$watch('user.email', function() {
// Reset exists validation property back to true
$scope.signupForm.email.$setValidity('exists', true);
});
, который, кажется, работает. Когда пользователь изменяет значение модели после того, как вход был установлен как недействительный, он вернет его к действию. Но это не кажется мне лучшим способом сделать это. Кто-нибудь знает лучше?