Passo a passo: criando pipe personalizado no Angular
Angular pipes pegam dados como entrada e os transformam na saída desejada. Por exemplo, usando a interpolação, você está exibindo o nome do produto. Agora você deseja que o nome do produto seja sempre exibido em maiúsculas. Você pode fazer isso usando Angular maiúsculas de tubo.
Angular pipes pegam dados como entrada e os transformam na saída desejada. Por exemplo, usando a interpolação, você está exibindo o nome do produto. Agora você deseja que o nome do produto seja sempre exibido em maiúsculas. Você pode fazer isso usando Angular maiúsculas de tubo.
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
template: `{{productName | uppercase}}`
})
export class AppComponent {
productName = 'Cricket Bat';
}
No componente acima, productName será exibido em maiúsculas. Portanto, o pipe pega uma entrada e a transforma na saída desejada, conforme mostrado abaixo:

Angular biblioteca nos fornece muitos pipes embutidos como,
- UpperCasePipe
- LowerCasePipe
- Tubo de Moeda
- PercentPipe
- DatePipe etc.
Vejamos como poderíamos usar o pipe de moeda embutido.
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
template: `{{productName | uppercase}} = {{productPrice | currency}}`
})
export class AppComponent {
productName = 'Cricket Bat';
productPrice = 990;
}
Você também pode passar parâmetros para uma tubulação usando os dois-pontos. Você pode passar a entrada para o pipe de moeda, conforme mostrado abaixo:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
template: `{{productName | uppercase}} = {{productPrice | currency:'CAD':'symbol-narrow':'4.2-2'}}`
})
export class AppComponent {
productName = 'Cricket Bat';
productPrice = 990;
}
Embora Angular forneça muitos pipes padrão, pode haver requisitos quando você cria pipes personalizados. Criar um pipe personalizado é tão simples quanto criar uma função. Digamos que queremos criar um pipe, que colocará em maiúscula a primeira letra de cada palavra em uma string.
Consider below component,
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<ul *ngFor='let n of names'>
<li>{{n.name}}</li>
</ul>
`
})
export class AppComponent {
names = [];
constructor() {
this.names = this.getNames();
}
getNames() {
return [
{ 'name': 'dhananjay Kumar' },
{ 'name': 'jason beres' },
{ 'name': 'adam jafe' }
];
}
}
Este componente imprimirá os nomes conforme abaixo:

Agora queremos colocar em maiúscula a primeira letra de cada palavra do nome. Para fazer isso, precisamos escrever um pipe personalizado. Para criar um pipe, você precisa seguir estas etapas:
- Create a class
- Implementa PipeTransform na classe
- Implement transform function
Assim, você pode criar um pipe para capitalizar o primeiro caractere, conforme mostrado na listagem abaixo:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'firstcharcateruppercase' })
export class FirstCharacterUpperCase implements PipeTransform {
transform(value: string, args: string[]): any {
if (!value) {
return value;
}
return value.replace(/\w\S*/g, function (str) {
return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase();
});
}
}
Como você pode ver, os pipes personalizados nada mais são do que uma função que recebe parâmetros de entrada e retorna algum valor. Você precisa escrever toda a lógica do pipe dentro do método de transformação.
Para usar o primeiro caractere de barra maiúscula, primeiro você precisa declará-lo no módulo, conforme mostrado abaixo:
import { FirstCharacterUpperCase } from './firstcharacteruppercase.pipe'
@NgModule({
declarations: [
AppComponent, FirstCharacterUpperCase
],
Em seguida, no componente, você pode usá-lo como abaixo:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<ul *ngFor='let n of names'>
<li>{{n.name | firstcharcateruppercase}}</li>
</ul>
`
})
export class AppComponent {
names = [];
constructor() {
this.names = this.getNames();
}
getNames() {
return [
{ 'name': 'dhananjay Kumar' },
{ 'name': 'jason beres' },
{ 'name': 'adam jafe' }
];
}
}
Agora você obterá na saída o primeiro caractere de cada nome em maiúsculas.

To summarize:
- Os tubos personalizados são de classe, que é decorado com @Pipe
- A propriedade Name do decorador @Pipe define o nome do pipe
- A classe Pipe deve implementar a interface PipeTransform
Ele deve implementar a lógica de negócios de pipe dentro do método de transformação.
Existem dois tipos de tubos
- Pipes sem estado
- Pipes com estado

O que usamos e criamos acima são pipes sem estado. São funções puras, que recebem uma entrada e retornam valores transformados.
Os pipes com estado são complexos de implementar e lembram o estado dos dados que transformam. Normalmente, eles criam uma solicitação HTTP, armazenam a resposta e exibem a saída. Angular pipe assíncrono embutido é um exemplo de pipe stateful. Em outras postagens, aprenderemos a criar pipes stateful personalizados.
Summary
Neste post, aprendemos sobre tubos em Angular. Os pipes transformam dados de entrada na saída desejada. Angular fornece muitos tubos embutidos; no entanto, pode haver requisitos para escrever pipes personalizados. Existem dois tipos de pipes: pipes stateless e stateful pipes.
Gostou deste post?
E aí está! Se você gostou deste post, por favor, compartilhe-o. Além disso, se você ainda não fez check-out Infragistics Ignite UI for Angular Componentes, certifique-se de fazê-lo! Eles têm 30+ componentes de Angular baseados em material para ajudá-lo a codificar aplicativos da web rápidos com mais rapidez.
