In this blog, we will learn how to improve readability. instead of displaying full numbers very often, there is a need to display shortened numbers. Here is an example of how to create your own customizable short number pipe in Angular.
Pipe in Angular is a data processing element that is used in a presentation layer (in a template). All pipes must implement the PipeTransform interface. PipeTransform interface contains a method called “transform()” which is invoked by Angular with a value passed as a first argument and optional parameters as a second argument.
Pipes can be joined into a set of pipes. In such a case output of the previous pipe will be input for the next one.
Task: Display text “1.5M” instead of 1500000 in the view.
A command to generate a new “shortNumber” pipe in pipes/ directory:
ng generate pipe pipes/shortNumber
The above command creates the pipes/short-number.pipe.ts file and registers ShortNumberPipe in modules declarations.
// short-number.pipe.ts import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'shortNumber' }) export class ShortNumberPipe implements PipeTransform { transform(value: any, args?: any): any { return null; } }
ShortNumberPipe class must implement the PipeTransform interface which is a common interface for all Angular pipes.
PipeTransform interface requires a single transform() method to be implemented. See short number functionality implementation below.
transform(number: number, args?: any): any { if (isNaN(number)) return null; // will only work value is a number if (number === null) return null; if (number === 0) return null; let abs = Math.abs(number); const rounder = Math.pow(10, 1); const isNegative = number < 0; // will also work for Negetive numbers let key = ''; const powers = [ { key: 'Q', value: Math.pow(10, 15) }, { key: 'T', value: Math.pow(10, 12) }, { key: 'B', value: Math.pow(10, 9) }, { key: 'M', value: Math.pow(10, 6) }, { key: 'K', value: 1000 } ]; for (let i = 0; i < powers.length; i++) { let reduced = abs / powers[i].value; reduced = Math.round(reduced * rounder) / rounder; if (reduced >= 1) { abs = reduced; key = powers[i].key; break; } } return (isNegative ? '-' : '') + abs + key; }
In the example above code “Q” stands for quadrillion, “T” — trillion, “B” — billion, “M” — million, “k” — kilo. And hardcoded fractionize defines the precision of rounding numbers. You are welcome to adjust it as your needs.
Import this pipe into the module.
@NgModule({ declarations: [ ShortNumberPipe ], imports: [ CommonModule ], exports: [ShortNumberPipe] }) export class SharedModule { }
Let’s check the result with this piece of HTML:
<h1>{{1500000 | shortNumber}}</h1>
After interpolation it displays 1.5M. And if substitute 1500000 with 15300 the result of number transformation will be 15.3k.
In this article, we have to show Create and Used PIPE in angular
In this article, we have to show Create and Used PIPE in angular
In this article, we have to show Create and Used PIPE in angular