Quindi sto usando il framework MEAN per costruire la mia app web. Come tutte le altre app richiede un login & registrazione.
Il mio approccio finora è stato:
- Ogni funzione principale della mia app ha il proprio controller AngularJS
- Ho un controller del filtro dati, che aiuta a filtrare i dati all'interno dell'app. Ma il mio controller di filtri NON si connette al server stesso. Ho creato un servizio AngularJS che gestisce tutte le azioni con il server.
- E ho un "controller di accesso"
Il controller di accesso è responsabile poiché il nome suggerisce la gestione degli accessi.
La mia domanda:
La mia domanda è allora che sta eseguendo la convalida del modulo Client Side ( cioè controllando che i campi non siano vuoti, l'email sia del formato corretto ecc ) all'interno di un controller angularJS un buon approccio di progettazione?
Devo creare un servizio che gestisca tutte le convalide? Le funzioni di convalida dovrebbero essere private (cioè nei moduli javascript). Qual è il miglior approccio al design per questo?
Di seguito è riportato il mio codice del controller di accesso:
login.controller('login', function($scope){
$scope.checkValidEmail = function(){
var elem = document.getElementById("email");
var err = document.getElementById("emailErrorMessage");
var emailLabel = document.getElementById("emailLabel");
var success = document.getElementById("emailSuccessMessage");
var email = $scope.userEmail.toLowerCase();
var atpos = email.indexOf("@");
var dotpos = email.lastIndexOf(".");
if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= email.length) {
success.style.display = "none";
err.style.display = "-webkit-inline-box";
elem.style.borderColor = "#ef4d23";
elem.style.backgroundImage = "url(./img/error_sign.png)";
elem.style.backgroundRepeat = "no-repeat";
elem.style.backgroundPosition = "325px";
elem.style.backgroundSize = "16px 15px";
emailLabel.style.display = "none";
err.style.color = "#ef4d23";
err.innerHTML = "Email address is incorrect!";
$scope.valid = true;
return false;
} else {
success.style.display = "-webkit-inline-box";
success.style.color = "#27ae60";
success.innerHTML = "Email looks great!";
err.style.display = "none";
elem.style.borderColor = "#27ae60";
elem.style.backgroundImage = "url(./img/correct_sign.png)";
elem.style.backgroundRepeat = "no-repeat";
elem.style.backgroundPosition = "325px";
elem.style.backgroundSize = "12px 16px";
$scope.valid = false;
}
};
});