What Is Pipe?
Pipes transform displayed values within a template.
Use the @Pipe annotation to declare that a given class is a pipe. A pipe class must also implement a PipeTransform interface.
The @Pipe decorator allows you to define the pipe name that is globally available for use in any template in the across Angular apps. Pipe class implements the “PipeTransform” interfaces transform method that accepts an input value and returns the transformed result.
There will be one additional argument to the transform method for each parameter passed to the pipe.
The CLI commons for generate Pipe
ng g pipe PipeName
//OR
ng generate pipe PipeName
Pipe decorator and metadata:
@Pipe({
name: string
pure?: boolean
})
The pipe name is used for template bindings.To use the pipe you must set a reference to this pipe class in the module.
Why use Pipes?
Sometimes, the data is not displayed in the well format on the HTML templates that times were using pipes.
You also can execute a function in the HTML template to get its returned value.
For example – If you want to display a credit card number on your web apps – you can’t display the whole number on your web app – you should write a custom logic to display card number as like ****-****-2485 using your custom pipe.
What Is PipeTransform interface?
The Pipe class implements the PipeTransform interface that accepts input value (It is optional parameters) and returns the transformed value.
The transform method is an important method to a pipe. To create a Pipe, you must implement this interface.
Angular invokes the transform method with the value of a binding as the first, and second argument in list form.
The PipeTransform interface looks like this:
export interface PipeTransform {
transform(value: any, ...args: any[]): any;
}
And it imported from Angular core:
import {Pipe, PipeTransform} from '@angular/core';
Two Categories of Pipes in Angular
- pure
- impure
Every pipe has been pure by default. If you want to make a pipe impure that time you will allow the setting pure flag to false.
Angular Impure Pipes
What Is Impure Pipe?
Angular executes an impure pipe during every component change detection cycle. An impure pipe is called often, as often as every keystroke or mouse-move. If you want to make a pipe impure that time you will allow the setting pure flag to false.
@Pipe({
name: 'currency',
pure:false
})
The example for impure pipe:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'currency',
pure:false
})
export class CurrencyPipe implements PipeTransform {
transform(value: any, args?: any): any {
if (!value) {
return '1.00';
}
return value;
}
}
Angular Pure Pipes
What Is Pure Pipe?
Angular executes a pure pipe only when it detects a pure change to the input value. A pure change can be primitive or non-primitive. Primitive data are only single values, they have not special capabilities and the non-primitive data types are used to store the group of values.
@Pipe({
name: 'currency'
})
OR
@Pipe({
name: 'currency',
pure: true
})
And another example for a pure pipe:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'currency'
})
export class CurrencyPipe implements PipeTransform {
transform(value: any, args?: any): any {
if (!value) {
return '1.00';
}
return value;
}
}
The Pipe operator (|)
The pipe operator is used to specify a value transformation in an HTML template or view.
Angular Parameterizing a Pipe
What Is Parameterizing Pipe?
A pipe can accept any number of optional parameters to achieve output. The parameter value can be any valid template expressions. To add optional parameters follow the pipe name with a colon (:).
Its looks like- currency: ‘INR’In the following example:
<h2>The birthday is - {{ birthday | date:"MM/dd/yy" }} </h2>
<!-- Output - The birthday is - 10/03/1984 -->
What Is Chaining Pipe?
The chaining Pipe is used to perform the multiple operations within the single expression. This chaining operation will be chained using the pipe (I).
In the following example, to display the birthday in the upper case – will need to use the inbuilt date-pipe and upper-case-pipe.
In the following example
{{ birthday | date | uppercase}}
<!-- The output is - MONDAY, MARCH 10, 1984 -->
What Are Inbuilt Pipes in Angular?
Angular defines various Pipes API lists – That is called Inbuilt Pipes.
- DatePipe
- CurrencyPipe
- AsyncPipe
- DecimalPipe
- PercentPipe
- UpperCasePipe
- LowerCasePipe
- TitleCasePipe
- JsonPipe
- SlicePipe
- I18nSelectPipe
- And many more
Similarly, you can also create a custom pipe (as per your needs) and configure in a module that is globally available in across angular apps.
Angular DatePipe – The DatePipe is used to format a date with the help of locale rules.
{{ value_expression | date [ : format [ : timezone [ : locale ] ] ] }}
The full date provides you full date for the date. The short date converts the date to a short date and the long date provides you long date for the date.
<h3>{{TodayDate}}</h3>
<h3>{{TodayDate | date:'shortDate'}}</h3>
<h3>{{TodayDate | date:'longDate'}}</h3>
<h3>{{TodayDate | date:'fullDate'}}</h3>
Angular CurrencyPipe – The CurrencyPipe is used to format a currency with help of locale rules.
{{ value_expression | currency [ : currencyCode [ : display [ : digitsInfo [ : locale ] ] ] ] }}
The CurrencyPipe formats a number as a currency of a specific country. It takes country currency type as a parameter.
<tr>
<td>{{employee.salary | currency}}</td>
<td>{{employee.salary | currency : 'INR'}}</td>
<td>{{employee.salary | currency : 'INR' : true : '6.2'}}</td>
</tr>
Angular AsyncPipe – Angular provide a special kind of pipe that are called AsyncPipe and the AsyncPipe subscribes to an observable or promise and returns the latest value it has emitted.
The AsyncPipe allows you to bind your HTML templates directly to values that arrive asynchronously manner that is a great ability for the promises and observables.
{{ obj_expression | async }}
OR
<ul><li *ngFor="let account of accounts | async">{{account.ACNo }}</li></ul>
The example for AsyncPipe:
@Component({
selector: 'app-async-pipe',
template:`<ul><li *ngFor="let account of accounts | async"> A/C No- {{account.ACNo }} </li></ul>`,
styleUrls: ['./async-pipe.component.css']
})
export class AsyncPipeComponent implements OnInit {
accounts = [];//accounts declarations
apiURL: string = 'https://api.github.com/accounts/'; //fetching json data from Rest API
//AsyncPipe Component constructor
constructor(private accountService: AccountService) { }
//Load the account list
ngOnInit() {
this.accountService.getAccount(this.apiURL)
.subscribe(data => this.accounts = data);
}
}
Angular PercentPipe – Angular provides a PercentPipe and it is used to format a number as a percentage according to below rules.
{{ value_expression | percent [ : digitsInfo [ : locale ] ] }}
The input value to be formatted as a percentage and it can be any type.
The digitsInfo is optional string parameters and by default is undefined.
The locale is optional string parameters and by default is undefined.
<h2>Result- {{marks | percent}}</h2>
<!-- output result is - '98%'-->
Angular LowerCasePipe – Angular provides a LowerCasePipe and it is used to transforms given a text to lowercase.
{{ value_expression | lowercase }}
import { Component } from '@angular/core';
@Component({
selector: 'lowercase-pipe',
template: `<div>
<input type="text" #name (keyup)="changeLowerCase(name.value)">
<p>LowerCase - <h2>'{{value | lowercase}}'</h2>
</div>`
})
export class LowerCasePipeComponent {
value: string;
changeLowerCase(value: string) {
this.value = value;
}
}
Angular UpperCasePipe – Angular provides an UpperCasePipe and it is used to transforms given a text to uppercase.
{{ value_expression | uppercase }}
import { Component } from '@angular/core';
@Component({
selector: 'uppercase-pipe',
template: `<div>
<input type="text" #name (keyup)="changeUpperCase(name.value)">
<p>UpperCase - <h2>'{{value | uppercase}}'</h2>
</div>`
})
export class UpperCasePipeComponent {
value: string;
changeUpperCase(value: string) {
this.value = value;
}
}
Angular TitleCasePipe – The TitleCasePipe is used to converts the text (string type data) in which the first alphabet of each word is made capital latter and the rest will be in the small case letter.
{{ value_expression | titlecase }}
import { Component } from '@angular/core';
@Component({
selector: 'titlecase-pipe',
template: `<div>
<input type="text" #name (keyup)="changetitlecase(name.value)">
<p>titlecase - <h2>'{{value | titlecase}}'</h2>
</div>`
})
export class titlecasePipeComponent {
value: string;
changetitlecase(value: string) {
this.value = value;
}
}