Pipes

In Angular, pipes are a way to transform and format data in a declarative way within a template. Pipes take an input value and transform it into a desired output value, similar to a function. They are denoted in templates with the | character followed by the pipe name.

Here are a few examples of built-in pipes in Angular:

  1. date: Formats a date value according to a provided format.
<p>{{ birthdate | date:'yyyy-MM-dd' }}</p>
  1. uppercase: Transforms a string to uppercase.
<p>{{ name | uppercase }}</p>
  1. json: Converts an object to a JSON string.
<pre>{{ object | json }}</pre>
  1. async : waiting for async data to load before displaying it.
<div *ngIf="userObservable | async as user">
  {{user.name}}
</div>
  1. currency : format a number to a currency format
<p>{{price | currency: 'USD': 'symbol': '2.2-2'}}</p>

It’s possible to chain multiple pipes together and pass parameters to pipes.

<p>{{ birthdate | date:'yyyy-MM-dd' | uppercase }}</p>

You can also create custom pipes, which is a useful way to extend the built-in pipes or create pipes that perform specific, reusable tasks. Here’s an example of how to create a custom pipe:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'custom'
})
export class CustomPipe implements PipeTransform {
  transform(value: any, args?: any): any {
    // perform the desired transformation
    return transformedValue;
  }
}

This custom pipe can then be used in the same way as the built-in pipes, like

<p>{{ someValue | custom:arg1:arg2 }}</p>

Advantages to using pipes in Angular:

  1. Declarative transformation: Pipes allow you to declaratively transform and format data in the template, which makes the code more readable and maintainable. This also separates the presentation logic from the component’s business logic and makes the component code more testable.
  2. Reusability: Pipes are reusable, which means that they can be used in multiple parts of an application, reducing the amount of duplicated code. This also makes it easy to make global changes to the way data is formatted or transformed.
  3. Easy to test: Pipes are easy to test in isolation, which means that you can test the pipe’s logic without having to test the component that uses the pipe. This makes it easy to ensure that the pipe is working correctly and provides the expected output.
  4. Easy to extend : Pipes are extensible, you can create a custom pipe for specific use cases which can be reused in multiple places in your app, this way you can extend the functionality of the built-in pipes.
  5. Performance : Angular uses change detection to update the view when the data changes, this can be costly in certain scenarios. Pipes provides an efficient way to transform the data before it reaches the view, this can help to boost the performance of the application.
  6. Easy to read : Pipes make it easy to read and understand the transformation that’s going on in the template, this improves the readability of the templates and makes it easy for developers to understand how the data is being displayed to the user.

In summary, Pipes are useful for transforming data in a declarative way within a template, Angular provides several built-in pipes for common use-cases, also, it’s possible to create custom pipes for specific tasks. They make it easy to format and manipulate data and make the templates much cleaner and readable.