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.
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" >
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" >
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" >
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" >
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" >
Deberemos indicar en el <input>
que type=“number”
.
<input type="number" ng-model="model.edad" name="edad" >
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]*$/" >
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]*$/;
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
Deberemos indicar en el <input>
que type=“url”
.
<input type="url" ng-model="model.sitioweb" name="sitioweb" >
Ahora que ya sabemos cómo poner las validaciones falta saber si una validación ha fallado. Hay dos formas de saberlo:
Si sabemos un campo, podemos averiguar las validaciones que ha fallado. Para explicarlo vamos a hacerlo con unos ejemplos:
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
true
es que la validación ha fallado y no está el valorfalse
es que la validación es correcta y tiene valorundefined
es que no se está validando la validación required
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
true
es que la validación ha fallado y el valor no es un correo electrónicofalse
es que la validación es correcta y el valor es un correo electrónicoundefined
es que no se está validando la validación de email
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.
Dado un tipo de validación podemos saber cuántos campos no cumplen esa validación.Para explicarlo vamos a hacerlo con unos ejemplos:
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
false
es que no hay ningún campo que incumpla dicha validación.undefined
es que ningún campo está validando esa validación. En nuestro ejemplo es que nadie ha puesto required
en ningún campo.
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
false
es que no hay ningún campo que incumpla dicha validación.undefined
es que ningún campo está validando esa validación. En nuestro ejemplo significaría que no hay campos del tipo type=“email”
.
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>
.