¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. JavaScript y Angular
  3. Formateo en plantillas
Extrait - JavaScript y Angular De los fundamentos del lenguaje al desarrollo de una aplicación web
Extractos del libro
JavaScript y Angular De los fundamentos del lenguaje al desarrollo de una aplicación web Volver a la página de compra del libro

Formateo en plantillas

Introducción

Un pipe («tubo» en español) es un pequeño fragmento de código que se agrega después de una variable interpolada para modificar su visualización. Los más usados están en el módulo CommonModule de Angular. Un pipe se puede configurar para adaptarse perfectamente a las necesidades del desarrollador.

{{variable | pipe}} 

Usa pipes con las cadenas de caracteres

Hay tres pipes que permiten modificar la manera de representar una cadena de caracteres:

  • LowerCasePipe, permite transformar todas las letras en minúsculas.

  • UpperCasePipe, para transformar todas las letras en mayúsculas.

  • TitleCasePipe, para adoptar el estilo de «título» que consiste en resaltar en mayúsculas la primera letra de cada palabra de la frase.

// C:\JavaScriptYAngular\Angular\miProyectoAngular\src\app\ 
components\c10\c10.components.ts  
import {Component} from '@angular/core';  
  
@Component({  
 selector: 'app-c10',  
 template: `  
     <div class="container text-center">  
         <h2>El componente C10</h2>  
         <div>{{replica}}</div><br />  
         <div>{{replica | lowercase}}</div>  
         <div>{{replica | uppercase}}</div>  
         <div>{{replica | titlecase}}</div>  
     </div>  
 `  
})  
export class C10Component {  
 replica...

Usar pipes con los números

Se utilizan tres pipes para formatear números.

  • DecimalPipe

  • PercentPipe

  • CurrencyPipe

De forma predeterminada, Angular transforma los números siguiendo el modelo estadounidense, es decir, un punto entre la parte completa y la parte decimal de un número y una fecha en formato año-mes-día. Utilice la variable llamada LOCALE_ID para poder modificar eso.

// C:\JavaScriptYAngular\Angular\miProyectoAngular\src\app\ 
app-module.ts  
import {BrowserModule} from '@angular/platform-browser';  
import {LOCALE_ID, NgModule} from '@angular/core';  
  
import {AppRoutingModule} from './app-routing.module';  
import {AppComponent} from './app.component';  
import {C10Component} from './components/c10/c10.component';  
  
import {registerLocaleData} from '@angular/common';  
import es from '@angular/common/locales/es';  
 
registerLocaleData(es);  
  
@NgModule({  
 declarations: [  
   AppComponent,  
 ],  
 imports: [  
   BrowserModule,  
   AppRoutingModule  
 ],  
 providers: [{provide: LOCALE_ID, useValue: 'es'}],  
 bootstrap: [AppComponent]  
})  
export class AppModule {  
} 

1. DecimalPipe

Este pipe se puede utilizar para adaptar el número a las preferencias del usuario para redondear, por ejemplo.

{{variable | number : adaptacion }} 

La adaptación contiene tres variables:

  • el número...

Usar pipes con las fechas

A diferencia de otros lenguajes de programación, Angular hace que formatear una fecha sea extremadamente fácil.

JavaScript usa el mismo método que los sistemas UNIX para establecer la hora, pero de forma mucho más precisa. Mientras que UNIX define una fecha y hora como el número de segundos desde la medianoche del 1 de enero de 1970, JavaScript cuenta el número de milisegundos. Así que es el 1445418000000 cuando Doc, Marty y Jennifer llegan volando en el Delorean al futuro.

{{variable | date : format : timezone }} 

Nuevamente, este pipe se basa en la variable LOCALE_ID de app-module para adaptarse según los parámetros locales.

El formato puede ser predefinido por Angular o completamente personalizado por el desarrollador. La lista completa de variables y formatos existentes está disponible en el sitio web de Angular, en la documentación de la API (https://angular.io/api/common/DatePipe).

// C:\JavaScriptYAngular\Angular\miProyectoAngular\src\app\ 
components\c11\c11.components.ts  
import {Component} from '@angular/core';  
  
@Component({  
 selector: 'app-c10',  
 template: `  
     <div class="container text-center">  
         <h2>El componente C10</h2>  ...

Usar pipes en un objeto o un diccionario

1. KeyValuePipe

Para la visualización, a veces es más fácil recorrer un array en lugar de un diccionario o un objeto. En efecto, *ngFor necesita un iterable para funcionar.

KeyValuePipe permite convertir fácilmente estos dos tipos en un array.

{{variable | keyvalue : comparador}} 

Por defecto, variable se ordenará en orden ascendente de los valores de sus claves. Si el objeto o diccionario es un elemento complejo, el comparador permite modificar el comportamiento de clasificación predeterminado.

// C:\JavaScriptYAngular\Angular\miProyectoAngular\src\app\ 
components\c11\c11.components.ts  
import {Component} from '@angular/core';  
  
@Component({  
 selector: 'app-c10',  
 template: `  
     <div class="container text-center">  
         <h2>El componente C10</h2>  
         <h3>Un objeto</h3>  
         <div *ngFor="let unElemento of unObjeto | keyvalue">  
             {{unElemento.key}} - {{unElemento.value}}  
         </div>  
     ...

Usar pipes en arrays y cadenas de caracteres

1. SlicePipe

Este pipe se usa para seccionar un array o una cadena de caracteres en subpartes.

{{variable | slice : principio : fin}} 

El índice del primer elemento de un array o el primer carácter de una cadena de caracteres es 0, no 1. El número definido por fin no está incluido.

principio puede ser un número negativo. Luego contamos desde el final de la cadena de caracteres o la matriz.

{{’Adorable’ | slice :1:5}} mostrará «dora», ya que el carácter en el índice 1 es d y el carácter en el índice 5 es b, pero no está incluido.

Para un array, la lógica sigue siendo la misma. De hecho, una cadena de caracteres es solo una matriz de elementos.

// C:\JavaScriptYAngular\Angular\miProyectoAngular\src\app\ 
components\c11\c11.components.ts  
import {Component} from '@angular/core';  
  
@Component({  
 selector: 'app-c10',  
 template: `  
     <div class="container text-center">  
         <h2>El componente C10</h2>  
         <h3>Una cadena de carácteres</h3>  
         <div>{{ unaCadenaDeCaracteres...

Usar pipes con objetos que vienen de API externas

Una API es la fachada de un servicio web que no nos pertenece. Permite recuperar datos de otros entornos.

El sitio datos.gob.es censa todas las API del Estado. Todo esto es parte de un gran proyecto llamado «big data» que permite una mayor transparencia de los datos públicos.

1. JsonPipe

Este tubo se usa para mostrar un objeto usando el formato JSON (JavaScript Object Notation). De hecho, Angular no puede mostrar un objeto tal como está porque puede ser complejo. El formato JSON permite una lectura más fácil gracias a llaves y pares clave/valor.

// C:\JavaScriptYAngular\Angular\miProyectoAngular\src\app\ 
components\c11\c11.components.ts  
import {Component} from '@angular/core';  
  
@Component({  
 selector: 'app-c10',  
 template: `  
     <div class="container text-center">  
         <h2>El componente C10</h2>  
         <div>  
             <hr />  
             <p>Un objeto :</p>  
             <div>{{unObjeto}}</div>  
             <hr...

Práctica

1. Enunciado

Desde la aplicación PokemonManager creada anteriormente, agregue una tabla que contenga varios Pokémon al componente pokemons.

  • 001: Bulbasaur, de tipo planta y venenosa, que mide 70 centímetros y pesa 6,9 kilogramos.

  • 002: Ivysaur, de tipo planta y venenosa, que mide 1 metro y pesa 13 kilogramos. 

  • 003: Venusaur, de tipo planta y venenosa, que mide 2 metros y pesa 100 kilogramos. 

  • 004: Charmander, un lagarto de tipo fuego, que mide 60 centímetros y pesa 8,5 kilogramos.

  • 005: Charmaleon, de tipo fuego, que mide 1,1 metros y pesa 19 kilogramos. 

  • 006: Charizard, de tipo fuego y vuelo, que mide 1,7 metros y pesa 90,5 kilogramos. 

Con la ayuda del framework CSS de Bulma, muestre una lista de Pokemon en la plantilla de componentes pokemons.

Muestre los pesos en kilogramos y las alturas en metros respetando la convención numérica española (separador de miles y coma para números decimales).

Si no se ingresa la talla o el peso de un Pokémon, muestre «N/A».

Images/Image10-page14.png

Visualización de los Pokémon y sus características

2. Corrección

El array Pokémon es un objeto JavaScript. Exactamente como el array que hemos visto en el capítulo Plantillas, se declara en la clase TypeScript del componente. 

Esta vez, cada Pokémon es un objeto, ya que contiene varias características.

// C:\JavaScriptYAngular\Angular\PokemonManager\src\app\ 
components\pokemons\pokemons.component.ts  
import { Component, OnInit } from '@angular/core';  
  
@Component({  
 selector: 'app-pokemons',  
 templateUrl: './pokemons.component.html',  
 styleUrls: ['./pokemons.component.css']  
})  
export class PokemonsComponent implements OnInit {  
  
 pokemon = [  
   {'id': 1, 'nombre': 'Bulbasaur', 'categoria': 'semilla', 'tipo': 
['planta', 'veneno'], 'talla': 0,70, 'peso': 6,9}, 
  {'id': 2, 'nombre': 'Ivysaur', 'categoria': 'semilla', 'tipo': 
['planta', 'veneno'], 'talla': 1, 'peso':...