python ruby-programming-language Smalltalk Vue.js Knockoutjs TypeScript JavaScript, OOPs JavaScript Angular 7, Interview Questions Angular 8,7,6,5,4 and 2 Interview Questions and Answers Angular 8,7,6,5,4 and 2 Interview Questions and Answers Angular 4 Angular 2 AngularJs 1.x NodeJs Perl Programming R Programming RequireJs Rust Programming Backbonejs closure programming language go-programming-language kotlin-programming-language
6 Pipe decorator

Angular 5, 6 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;
  }
}

ANIL SINGH

Hi there! Welcome to my blog. My name is Anil Singh. I'm a author of this blog. For more detail about me, kindly refer to this link..
My Blogs - http://code-sample.com and http://code-sample.xyz
My Books - Interview Questions and Answers Books- Get Your Book in 15+ Digital Stores Worldwide..

You Might Also Like
www.code-sample.com/. Powered by Blogger.
ASK Questions