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 -
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 –
1) pure
2) 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.
1) DatePipe
2) CurrencyPipe
3) AsyncPipe
4) DecimalPipe
5) PercentPipe
6) UpperCasePipe
7) LowerCasePipe
8) TitleCasePipe
9) JsonPipe
10) SlicePipe
11) I18nSelectPipe
12) 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 Example for date pipe –
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.
The example for the currency pipe –
<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.
The expression with Async pipe-
{{ obj_expression
| async }}
OR
<ul><li
*ngFor="let
account of accounts | async">{{account.ACNo
}}</li></ul>
The object expression can be observable, promise,
null, or undefined.
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/anilsingh/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.
The expression rule with percent -
{{ 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.
The example as,
<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.
The expression with lowercase -
{{ value_expression
| lowercase }}
The example as,
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.
The expression with uppercase -
{{ value_expression
| uppercase }}
The example as,
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.
The expression with titlecase -
{{ value_expression
| titlecase }}
The example as,
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;
}
}