2012-08-28 28 views
13

La validación predeterminada para el formulario que tengo funciona como se esperaba. Pero cuando un usuario ingresa una dirección de correo electrónico válida y una contraseña de tres caracteres como mínimo, eso no significa que las credenciales de inicio de sesión sean válidas.Formulario de validación del lado del servidor Angular.js

Así que mi pregunta es ¿cómo puedo configurar el modelo ' de correo electrónico' y 'contraseña ' a inválido después validación del lado del servidor, por lo que los campos de entrada-ng obtener la inválido clase en lugar de ng- válido.

Mi código actual:

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('/'); 
     } 
    }); 
    }; 
} 

Cualquier ayuda es bienvenida y muy apreciada. ¡Gracias por adelantado!

+4

¿Puede simplemente utilizar $ setValidity método? – Tosh

+2

Totalmente no relacionado, pero configuro el código de estado en 400 cuando mis llamadas AJAX devuelven errores. De esta forma, no es necesario que compruebe o configure 'data.success', sino que simplemente maneje los errores en la devolución de llamada de error. – DanH

Respuesta

5

Tosh shimayama dio la respuesta correcta. $ setValidity es un método del NgModelController y toma dos parámetros: validationErrorKey y isValid.

Más información sobre $ setValidity

cambiar el estado de validez, y notifica a la forma cuando el control cambios validez. (es decir, no notifica el formulario si el validador dado es ya marcado como no válido).

Fuente y más información AngularJS: NgModelController

3

La validación del lado del cliente es rápida, pero es fácil de romper, usando por ejemplo - firebug. Puede quedarse con solo la validación del lado del servidor. Valide todo en el servidor y devuelva BODY con una lista de claves y mensajes de error. Angular le permite enviar datos al servidor de forma asincrónica, el usuario final lo verá como una validación del lado del cliente, ya que no hubo una devolución posterior visible.

Ver este ejemplo, intenta hacer clic en 'Guardar', y ver los mensajes de error: upida.cloudapp.net:8080/org.upida.example.angular/order/create?clientId=1

Puede descargarlo: upida.codeplex.com

Cuestiones relacionadas