Páginas

martes, 26 de agosto de 2014

AngularJS (04) Filtros

Los filtros sirven para procesar las información antes de que esta aparezca en pantalla, generalmente para darles algún tipo de formato o para seleccionar los elementos de un array.

Para poder utilizar los filtros tan solo hay que utilizar en carácter especial | también llamado pipe o tubería, de la siguiente forma:
<p>El nombre es:  {{ persona.nombre | uppercase }}</p>

Como podemos ver, la expresión se amplia con la tuberia y el filtro que queremos aplicar...

Existen diferentes tipos de filtros, como podemos ver en la siguiente lista:
  • currency: que da formato a un numero a formato moneda
  • filter: que selecciona un subconjunto del array
  • lowercase: que convierte la cadena en minúsculas
  • orderBy: ordena el array por una expresión
  • uppercase: que convierte una cadena en mayúsculas
 

Añadiendo filtros a un expresión

Vamos a añadair un filtro a uno de los ejemplos que ya vamos conociendo para ver su resultado:
<!DOCTYPE html>
<html>

<body>

<div ng-app="" ng-controller="personController">

<p>¿Nombre? <input type="text" ng-model="persona.nombre"></p>
<p>¿Apellido? <input type="text" ng-model="persona.apellido"></p>

<p>El nombre es:  {{ persona.nombre | uppercase }}</p>

<p>El apellido es:  {{ persona.apellido | lowercase }}</p>

</div>

<script>
function personController($scope) {
    $scope.persona = {
        nombre: "Miguel",
        apellido: "Ramirez"
    };
}
</script>

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>

</body>
</html>
En el ejemplo ya podemos ver mezcladas varias cosas de las que hemos visto hasta el momento, ya que recoge las variables con ng-model, llamando al objeto y a la propiedad (persona.nombre), utiliza un controlador para crear el objeto y finalmente muestra el resultado con una expresión y un filtro que convierte al nombre en mayúsculas y al apellido en minúscula.

Currency

Este filtro convierte los números en moneda, aunque por defecto lo hace en dolares ($), se puede convertir en euros (€) de forma muy sencilla, como vemos en el filtro del siguiente ejemplo:
<!DOCTYPE html>
<html>

<body>

<div ng-app="" ng-controller="costController">

Cantidad: <input type="number" ng-model="cantidad">
Precio: <input type="number" ng-model="precio">

<p>Total = {{ (cantidad * precio) | currency:"€" }}</p>

</div>

<script>
function costController($scope) {
    $scope.cantidad = 1;
    $scope.precio = 9.99;
}
</script>

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>

</body>
</html>

Sencillo ¿verdad?

Añadiendo filtros a las directivas

Ahora vamos a poner un filtro a una directiva que ordena un array, veras que sencillo es:
<!DOCTYPE html>
<html>

<body>

<div ng-app="" ng-controller="namesController">

<p>Bucle de objetos:</p>
<ul>
  <li ng-repeat="x in nombres | orderBy:'provincia'">
    {{ x.nombre + ', ' + x.provincia }}
  </li>
</ul>

</div>

<script>function namesController($scope) {
    $scope.nombres = [
        {nombre:'Maria',provincia:'Córdoba'},
        {nombre:'Jose',provincia:'Barcelona'},
        {nombre:'Antonio',provincia:'Madrid'},
        {nombre:'Ana',provincia:'Huelva'},
        {nombre:'Juan',provincia:'Jaen'},
        {nombre:'Raquel',provincia:'Orense'}
    ];
} </script>

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>

</body>
</html>

Vemos como en la directiva de repetición entra el filtro ordenando por el nombre provincia y como AngularJS recorre todo el array ordenando los elementos de esta forma.

Filtrando por inputs

Una herramienta muy potente es el filtrado por inputs, como veras en el siguiente script:
<!DOCTYPE html>
<html>
<body>

<div ng-app="" ng-controller="namesController">

<p>Input con filtro:</p>

<p><input type="text" ng-model="nombre"></p>

<ul>
  <li ng-repeat="x in nombres | filter:nombre | orderBy:'provincia'">
    {{ (x.nombre | uppercase) + ', ' + x.provincia }}
  </li>
</ul>

</div>

<script>function namesController($scope) {
    $scope.nombres = [
        {nombre:'Maria',provincia:'Córdoba'},
        {nombre:'Jose',provincia:'Barcelona'},
        {nombre:'Antonio',provincia:'Madrid'},
        {nombre:'Ana',provincia:'Huelva'},
        {nombre:'Juan',provincia:'Jaen'},
        {nombre:'Raquel',provincia:'Orense'}
    ];
}</script>

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>

</body>
</html>

En la directiva ng-repeat hemos introducido dos filtros, uno que filtra por nombre y el otro que ordena por provincia, de ese modo cuando en el input introducimos letras, estas se buscan en la cadena que genera la directiva de repetición y se muestran los resultados positivos ordenados por provincia.

Nota: He querido poner los script aun dentro del código para que podáis ir siguiéndolos, aunque lo correcto ya sería tenerlos en un archivo aparte.
Nota2: os invito a que curioseéis un poco con esto, de hecho se puede ver que tiene una gran potencia para trabajar e incluso de sustituir algunas funcionalidades de AJAX...



No hay comentarios:

Publicar un comentario