Sto creando un modulo di registrazione in Angular con tre ingressi: email
, password
e passwordConfirm
. Il mio controller è simile al seguente:
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);
});
}
});
};
});
Che cosa questo sta facendo è l'invio di una richiesta alla mia API quando l'utente invia il modulo per registrarsi. Se viene restituita una risposta 422
(che significa errori di convalida), effettuo il looping di tali elementi e imposta gli input corrispondenti su non valido in base a ciò che l'API ha restituito.
Facciamo l'esempio di un indirizzo email già registrato. Mostro l'errore di convalida, a mio avviso in questo modo:
<small class="error" ng-show="signupForm.email.$error.exists">Email address taken, please use another</small>
Questo tutto funziona perfettamente, ma il mio utente è ormai bloccato perché quando si cerca di modificare l'indirizzo e-mail ad un altro, la validità del email
campo isn' t modificato per consentire loro di inviare nuovamente il modulo (disabilitare il pulsante di invio in base alla validità del modulo).
Fondamentalmente, ho bisogno che la proprietà di convalida (in questo caso exists
) venga reimpostata su true
dopo che l'utente ha modificato il modello di input. Qual è il modo migliore per me di farlo?
Edit: Un piccolo lampo di genio mi ha colpito dopo la pubblicazione, ho aggiunto questo al mio controllo:
$scope.$watch('user.email', function() {
// Reset exists validation property back to true
$scope.signupForm.email.$setValidity('exists', true);
});
che sembra funzionare. Quando l'utente modifica il valore del modello dopo che l'input è stato impostato su non valido, questo lo imposta su valido. Ma questo non mi sembra il modo migliore per farlo. Qualcuno sa meglio?