Trabalhando com Pipes em Angular
Pipes são ferramentas especiais que permitem formatar os valores exibidos. Por exemplo, podemos querer exibir uma data específica:
import { Component } from "@angular/core";
import { DatePipe } from "@angular/common";
@Component({
selector: "my-app",
standalone: true,
imports: [DatePipe], // importando o DatePipe
template: `<div>Sem formatação: {{ myDate }}</div>
<div>Com formatação: {{ myDate | date }}</div>`,
})
export class AppComponent {
myDate = new Date(1961, 3, 12);
}
Aqui, criamos uma data que é exibida duas vezes no template. No segundo caso, a data é formatada com a ajuda da classe DatePipe
. No entanto, para usar o DatePipe
, é necessário importá-lo do pacote "angular/common"
.
Pipes Integrados
O Angular oferece uma variedade de pipes integrados. Alguns dos principais são:
CurrencyPipe
: formata valores monetários.PercentPipe
: formata percentuais.UpperCasePipe
: converte uma string para letras maiúsculas.LowerCasePipe
: converte uma string para letras minúsculas.DatePipe
: formata datas.DecimalPipe
: define o formato de números.SlicePipe
: corta partes de uma string.
Ao utilizar esses pipes, o sufixo "Pipe" é omitido (com exceção do DecimalPipe
, que usa o nome "number" para aplicação):
import { Component } from "@angular/core";
import { UpperCasePipe, LowerCasePipe, PercentPipe, CurrencyPipe } from "@angular/common";
@Component({
selector: "my-app",
standalone: true,
imports: [UpperCasePipe, LowerCasePipe, PercentPipe, CurrencyPipe],
template: `<div>UpperCasePipe: {{ welcome | uppercase }}</div>
<div>LowerCasePipe: {{ welcome | lowercase }}</div>
<div>PercentPipe: {{ percentage | percent }}</div>
<div>CurrencyPipe: {{ percentage | currency }}</div>`,
})
export class AppComponent {
welcome: string = "Hello World!";
percentage: number = 0.14;
}
Parâmetros em Pipes
Pipes podem receber parâmetros. Por exemplo, o SlicePipe
, que corta uma string, pode receber índices de início e fim da substring que será extraída:
import { Component } from "@angular/core";
import { SlicePipe } from "@angular/common";
@Component({
selector: "my-app",
standalone: true,
imports: [SlicePipe],
template: `<div>{{ welcome | slice : 3 }}</div>
<div>{{ welcome | slice : 6 : 11 }}</div>`,
})
export class AppComponent {
welcome: string = "Hello World!";
}
Todos os parâmetros são passados para o pipe por meio de dois-pontos. No exemplo slice:6:11, uma substring é extraída do índice 6 ao 11. O índice inicial é obrigatório, mas o índice final é opcional. Se não for especificado, a substring vai até o fim da string.
Formatando Datas
O DatePipes
pode receber um modelo de data como parâmetro:
import { Component } from "@angular/core";
import { DatePipe } from "@angular/common";
@Component({
selector: "my-app",
standalone: true,
imports: [DatePipe],
template: `<div>{{ myDate | date : "dd/MM/yyyy" }}</div>`,
})
export class AppComponent {
myDate = Date.now();
}
Formatando Números
O DecimalPipe
aceita um modelo de formato numérico como parâmetro:
import { Component } from "@angular/core";
import { DecimalPipe } from "@angular/common";
@Component({
selector: "my-app",
standalone: true,
imports: [DecimalPipe],
template: `<div>{{ pi | number : "2.1-2" }}</div>
<div>{{ pi | number : "3.5-5" }}</div>`,
})
export class AppComponent {
pi: number = 3.1415;
}
O modelo segue o formato "minIntegerDigits.minFractionDigits-maxFractionDigits", onde:
minIntegerDigits
: número mínimo de dígitos na parte inteira.minFractionDigits
: número mínimo de dígitos na parte decimal.maxFractionDigits
: número máximo de dígitos na parte decimal.locale
: código da localidade a ser aplicada.
Formatando Valores Monetários
O CurrencyPipe
pode receber uma série de parâmetros:
import { Component } from "@angular/core";
import { CurrencyPipe } from "@angular/common";
@Component({
selector: "my-app",
standalone: true,
imports: [CurrencyPipe],
template: `<div>{{ money | currency : "BRL" }}</div>
<div>{{ money | currency : "BRL" : "code" : "1.1-1" }}</div>`,
})
export class AppComponent {
money: number = 23.45;
}
Aqui estão alguns dos parâmetros que podem ser utilizados:
currencyCode
: o código da moeda, conforme a especificação ISO 4217 (padrão é USD).display
: como o símbolo da moeda será exibido. Pode ser "code" (código da moeda), "symbol" (símbolo da moeda, padrão), "symbol-narrow" (símbolo estreito), ou uma string personalizada.digitsInfo
: o formato do número, similar aoDecimalPipe
.locale
: código de localidade a ser aplicado.
Combinando Pipes
É possível aplicar vários pipes a um único valor, criando uma cadeia de transformações separadas por uma barra vertical:
import { Component } from "@angular/core";
import { SlicePipe, UpperCasePipe } from "@angular/common";
@Component({
selector: "my-app",
standalone: true,
imports: [SlicePipe, UpperCasePipe],
template: `<div>{{ message | slice : 6 : 11 | uppercase }}</div>`,
})
export class AppComponent {
message = "Hello World!";
}