2012-08-28 17 views
13

Domyślne sprawdzanie poprawności formularza, które mam działa zgodnie z oczekiwaniami. Ale gdy użytkownik wpisze poprawny adres e-mail i hasło o długości co najmniej trzech znaków, nie oznacza to, że dane logowania są prawidłowe.Formularz weryfikacji po stronie serwera Angular.js

Więc moje pytanie brzmi: w jaki sposób mogę ustawić model „email” oraz „hasło” to nieważne po walidacji stronie serwera, więc input-pola uzyskać klasę ng-invalid zamiast ng- ważny.

Mój bieżący kod:

function IndexCtrl($scope, $http) 
{ 
    $scope.form = {}; 
    $scope.submitLogin = function() 
    { 
    $http.post('/api/auth/login', $scope.form).success(function(data) 
    { 
     if (!data.success) 
     { 
     $scope.form.errors = [ data ]; 

     // here I also want to mark the models 'email' and 'password' as invalid, so they both get the class 'ng-invalid' 
     } 
     else 
     { 
     $location.path('/'); 
     } 
    }); 
    }; 
} 

Każda pomoc jest mile widziany i bardzo doceniane. Z góry dziękuję!

+4

można po prostu użyć $ setValidity metoda? – Tosh

+2

Całkowicie niepowiązanych, ale ustawiam kod statusu na 400, gdy moje wywołania AJAX zwracają błędy. W ten sposób nie musisz sprawdzać ani ustawiać 'data.success', ale zamiast tego radzisz sobie z błędami w wywołaniu błędu. – DanH

Odpowiedz

5

Tosh shimayama podał prawidłową odpowiedź. $ setValidity jest metodą z NgModelController i przyjmuje dwa parametry: validationErrorKey i isValid.

Więcej informacji na $ setValidity

zmienić stan ważności i powiadamia, gdy formularz zmiany ważności kontrola . (tj. nie powiadamia formularza, jeśli dany weryfikator jest , już oznaczony jako nieważny).

Źródło i dalsze informacje AngularJS: NgModelController

3

Walidacja po stronie klienta jest szybka, ale łatwo ją złamać, używając np. firebug. Można trzymać tylko z walidacją po stronie serwera. Sprawdź poprawność wszystkiego na serwerze i zwróć BODY z listą kluczy i komunikatów o błędach. Angular pozwala na asynchroniczne przesyłanie danych do serwera, a użytkownik końcowy widzi to jako walidację po stronie klienta, ponieważ nie było widocznych zwrotów.

Zobacz ten przykład, spróbuj kliknąć „Zapisz” i zobaczyć komunikaty o błędach: upida.cloudapp.net:8080/org.upida.example.angular/order/create?clientId=1

Można go pobrać: upida.codeplex.com

Powiązane problemy