Skip to main content

Angular Pipes Decorator - PipeTransform, Pure, and Impure

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;
  }
}

By Anil Singh | Rating of this article (*****)

Popular posts from this blog

List of Countries, Nationalities and their Code In Excel File

Download JSON file for this List - Click on JSON file    Countries List, Nationalities and Code Excel ID Country Country Code Nationality Person 1 UNITED KINGDOM GB British a Briton 2 ARGENTINA AR Argentinian an Argentinian 3 AUSTRALIA AU Australian an Australian 4 BAHAMAS BS Bahamian a Bahamian 5 BELGIUM BE Belgian a Belgian 6 BRAZIL BR Brazilian a Brazilian 7 CANADA CA Canadian a Canadian 8 CHINA CN Chinese a Chinese 9 COLOMBIA CO Colombian a Colombian 10 CUBA CU Cuban a Cuban 11 DOMINICAN REPUBLIC DO Dominican a Dominican 12 ECUADOR EC Ecuadorean an Ecuadorean 13 EL SALVA...

nullinjectorerror no provider for httpclient angular 17

In Angular 17 where the standalone true option is set by default, the app.config.ts file is generated in src/app/ and provideHttpClient(). We can be added to the list of providers in app.config.ts Step 1:   To provide HttpClient in a standalone app we could do this in the app.config.ts file, app.config.ts: import { ApplicationConfig } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; import { provideClientHydration } from '@angular/platform-browser'; //This (provideHttpClient) will help us to resolve the issue  import {provideHttpClient} from '@angular/common/http'; export const appConfig: ApplicationConfig = {   providers: [ provideRouter(routes),  provideClientHydration(), provideHttpClient ()      ] }; The appConfig const is used in the main.ts file, see the code, main.ts : import { bootstrapApplication } from '@angular/platform-browser'; import { appConfig } from ...

React Lifecycle Components | Mounting, Updating, Unmounting

In React, each component has a life-cycle which manipulate during its three main phases. The following three phases are: 1.       Mounting 2.       Updating 3.       Unmounting React does so by “ Mounting ” (adding nodes to the DOM), “ Unmounting ” (removing them from the DOM), and “ Updating ” (making changes to nodes already in the DOM). Mounting - Lifecycle Phase 1 Mounting is used for adding nodes (elements) to the DOM. The React has four built-in methods that gets called, in this order, when mounting a component - 1.       constructor() 2.       getDerivedStateFromProps() 3.       render() 4.       componentDidMount() Note – 1)       The render() method is required and It always be called and the others methods are optional (you will call...

Angular 8, 7, 6, 5, 4, 2 - Open and Close Modal Popup Using Typescript and Bootstrap

How to Create a Modal Popup for Angular? Two ways to CREAT Modal Popup Window - 1.       Modal Popup using Typescript and Bootstrap 2.       Modal Popup using Angular Material Dialogue Open Modal Popup Using Typescript and Bootstrap – Download and use the Bootstrap CDN to deliver Bootstrap's compiled CSS and JS to your project. Steps 1 – Add Bootstrap CSS and Js files in the AppComponent.HTML file. < link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"   crossorigin = "anonymous" > < script src = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"   crossorigin = "anonymous" ></ script > You can also Install Bootstrap from NPM – npm install bootstrap – save Steps 2 – Add Style CSS for Login and Popup validations and it looks like. .ng-valid[ required ], .ng-valid.required   {  ...

51 Best React Interview Questions and Answers

1) What Is React? React is a fast, open-source, and front-end JavaScript library and It was developed by Facebook in 2011 for building complex, stateful and interactive UI in web as well as mobile Applications. React follows the component based approach which helps you to building reusable and interactive web and mobile user interface (UI) components. React has one of the largest communities supporting it. The high level component Lifecycle - At the highest level component Lifecycle, React components have lifecycle events that are - 1.       Initialization 2.       State/Property Updates 3.       Destruction Explore to detail understanding   -  React Lifecycle Components Reactjs is very fast technology that can be trusted for complex tasks and can simply be trusted for quality outcomes. 2) When Reactjs released? March 2013 3) What Is the current stable version of ...