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

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 ...

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...

39 Best Object Oriented JavaScript Interview Questions and Answers

Most Popular 37 Key Questions for JavaScript Interviews. What is Object in JavaScript? What is the Prototype object in JavaScript and how it is used? What is "this"? What is its value? Explain why "self" is needed instead of "this". What is a Closure and why are they so useful to us? Explain how to write class methods vs. instance methods. Can you explain the difference between == and ===? Can you explain the difference between call and apply? Explain why Asynchronous code is important in JavaScript? Can you please tell me a story about JavaScript performance problems? Tell me your JavaScript Naming Convention? How do you define a class and its constructor? What is Hoisted in JavaScript? What is function overloadin...

25 Best Vue.js 2 Interview Questions and Answers

What Is Vue.js? The Vue.js is a progressive JavaScript framework and used to building the interactive user interfaces and also it’s focused on the view layer only (front end). The Vue.js is easy to integrate with other libraries and others existing projects. Vue.js is very popular for Single Page Applications developments. The Vue.js is lighter, smaller in size and so faster. It also supports the MVVM ( Model-View-ViewModel ) pattern. The Vue.js is supporting to multiple Components and libraries like - ü   Tables and data grids ü   Notifications ü   Loader ü   Calendar ü   Display time, date and age ü   Progress Bar ü   Tooltip ü   Overlay ü   Icons ü   Menu ü   Charts ü   Map ü   Pdf viewer ü   And so on The Vue.js was developed by “ Evan You ”, an Ex Google software engineer. The latest version is Vue.js 2. The Vue.js 2 is very similar to Angular because Evan ...

React | Encryption and Decryption Data/Text using CryptoJs

To encrypt and decrypt data, simply use encrypt () and decrypt () function from an instance of crypto-js. Node.js (Install) Requirements: 1.       Node.js 2.       npm (Node.js package manager) 3.       npm install crypto-js npm   install   crypto - js Usage - Step 1 - Import var   CryptoJS  =  require ( "crypto-js" ); Step 2 - Encrypt    // Encrypt    var   ciphertext  =  CryptoJS . AES . encrypt ( JSON . stringify ( data ),  'my-secret-key@123' ). toString (); Step 3 -Decrypt    // Decrypt    var   bytes  =  CryptoJS . AES . decrypt ( ciphertext ,  'my-secret-key@123' );    var   decryptedData  =  JSON . parse ( bytes . toString ( CryptoJS . enc . Utf8 )); As an Example,   import   React   from ...