Tabla de Contenidos
8.2 Validaciones
Acabamos de ver cómo saber si un campo o formulario es o no válido. En este tema vamos a ver las validaciones estándar que tiene angular dejando para la unidad 00_start la creación de nuevas validaciones.
Tipos de Validaciones
AngularJs dispone de 9 tipos de validaciones distintas:
email: El campo debe tener el formato de un correo electrónicomax: El campo debe tener un valor máximomaxlength: El campo debe tener un nº máximo de caracteresmin: El campo debe tener un valor mínimominlength: El campo debe tener un nº mínimo de caracteresnumber: El campo debe ser un númeropattern: El campo debe seguir una expresión regularrequired: el campo es requeridourl: El campo debe tener el formato de una URL
<form>como el <input>, <select> , etc. tengan la propiedad name.
<form name="nombre"> </form> <input name="nombre"> <select name="nombre">
Pasemos ahora a ver cómo se aplican cada una de ellas.
Deberemos indicar en el <input> que type=“email”.
<input type="email" ng-model="model.correo" name="correo" >
max
Sólo se aplica a <input> cuyo type=“number”.
Deberemos indicar la directiva max=“valor”, siendo valor el valor máximo que puede tener.
<input type="number" ng-model="model.edad" name="edad" max="99" >
maxlength
Sólo se aplica a <input> cuyo type=“number” o type=“text” o <textarea>.
Deberemos indicar la directiva ng-maxlength=“valor”, siendo valor el tamaño máximo que puede tener en caracteres.
<input type="text" ng-model="model.nombre" name="nombre" ng-maxlength="50" >
min
Sólo se aplica a <input> cuyo type=“number”.
Deberemos indicar la directiva min=“valor”, siendo valor el valor mínimo que puede tener.
<input type="number" ng-model="model.edad" name="edad" min="18" >
minlength
Sólo se aplica a <input> cuyo type=“number” o type=“text” o <textarea>.
Deberemos indicar la directiva ng-minlength=“valor”, siendo valor el tamaño mínimo que puede tener en caracteres.
<input type="text" ng-model="model.nombre" name="nombre" ng-minlength="3" >
number
Deberemos indicar en el <input> que type=“number”.
<input type="number" ng-model="model.edad" name="edad" >
pattern
Sólo se aplica a <input> cuyo type=“number” , type=“text” o type=“email” o <textarea>.
Deberemos indicar la directiva ng-pattern=“valor”, siendo valor la expresión regular que tiene que cumplir el valor.
<input type="text" ng-model="model.nombre" name="nombre" ng-pattern="/^[a-zA-Z]*$/" >
- Hay que poner las barras al principio y al final
- Si quieres que la expresión se aplique a todo el valor pon “^” al principio y “$” al final
Esta directiva permite que la expresión regular esté en una propiedad del $scope. En ese caso se debe poner así:
<input type="text" ng-model="model.nombre" name="nombre" ng-pattern="patternNombre" >
Y en $scope indicar lo siguiente:
$scope.patternNombre=/^[a-zA-Z]*$/;
required
Se aplica a cualquier <input> , <select> o <textarea>.
Se debe poner la directiva required o ng-required.
La diferencia entre ellos es que al poner required el valor es requerido pero al poner ng-required se le podría poner un valor al atributo ng-required que fuera true o false pero que dicho valor venga del $scope.
<input type="text" ng-model="model.nombre" name="nombre" required >
<input type="text" ng-model="model.nombre" name="nombre" ng-required="requeridoNombre" >
En este segundo ejemplo para que fuera requerido model.nombre, deberíamos tener en el $scope :
$scope.requeridoNombre=true
y para que no fuera requerido model.nombre, deberíamos tener en el $scope :
$scope.requeridoNombre=false
url
Deberemos indicar en el <input> que type=“url”.
<input type="url" ng-model="model.sitioweb" name="sitioweb" >
Comprobando las validaciones
Ahora que ya sabemos cómo poner las validaciones falta saber si una validación ha fallado. Hay dos formas de saberlo:
- Sobre un campo
- Sobre un tipo de validación
Sobre un campo
Si sabemos un campo, podemos averiguar las validaciones que ha fallado. Para explicarlo vamos a hacerlo con unos ejemplos:
Ejemplo 1
Si queremos saber si ha fallado la validación required en el campo nombre del formulario miFormulario deberemos ver el valor de la siguiente expresión:
$scope.miFormulario.nombre.$error.required
- Si vale
truees que la validación ha fallado y no está el valor - Si vale
falsees que la validación es correcta y tiene valor - Si vale
undefinedes que no se está validando la validaciónrequired
Ejemplo 2
Si queremos saber si ha fallado la validación email en el campo correo del formulario miFormulario deberemos ver el valor de la siguiente expresión:
$scope.miFormulario.correo.$error.email
- Si vale
truees que la validación ha fallado y el valor no es un correo electrónico - Si vale
falsees que la validación es correcta y el valor es un correo electrónico - Si vale
undefinedes que no se está validando la validación deemail
Lo que nos retorna la expresión $scope.miFormulario.nombre o $scope.miFormulario.correo son objetos de tipo NgModelController sobre los que podremos acceder a todas sus propiedades.
Sobre un tipo de validación
Dado un tipo de validación podemos saber cuántos campos no cumplen esa validación.Para explicarlo vamos a hacerlo con unos ejemplos:
Ejemplo 1
Si queremos saber cuántos campos han fallado la validación de required del formulario miFormulario deberemos ver el valor de la siguiente expresión:
$scope.miFormulario.$error.requiredEl resultado es esta expresión
- Si vale
falsees que no hay ningún campo que incumpla dicha validación. - Si vale un array. El contenido del array son objetos de la clase NgModelController correspondientes a cada uno de los campos en los que ha fallado esa validación
- Si vale
undefinedes que ningún campo está validando esa validación. En nuestro ejemplo es que nadie ha puestorequireden ningún campo.
Ejemplo 2
Si queremos saber cuántos campos han fallado la validación de email del formulario miFormulario deberemos ver el valor de la siguiente expresión:
$scope.miFormulario.$error.emailEl resultado es esta expresión
- Si vale
falsees que no hay ningún campo que incumpla dicha validación. - Si vale un array. El contenido del array son objetos de la clase NgModelController correspondientes a cada uno de los campos en los que ha fallado esa validación.
- Si vale
undefinedes que ningún campo está validando esa validación. En nuestro ejemplo significaría que no hay campos del tipotype=“email”.
novalidate
Lo último que nos queda por contar es el atributo novalidate que debemos poner en el tag <form>.
Este atributo se pone para evitar que el propio navegador se ponga a hacer sus propias validaciones con sus propios mensajes o estilos CSS y que choquen con las que está haciendo AngularJS.
<form name="miFormulario" novalidate > </form>
novalidate en el tag <form>.
Ejemplo
