In this example, we are going to see how to use Pipe as providers inject into component.
We have the pipe:
import {Pipe, PipeTransform} from '@angular/core'; @Pipe({ name: 'filesize' }) export class FileSizePipe implements PipeTransform{ transform(value: number, ext: string = "MB") { return (value / (1024 * 1024)).toFixed(2) + ' ' + ext; } }
We want to inject this pipe as provider to the component:
import { Component, OnInit } from '@angular/core'; import {FileSizePipe} from './filesize.pipe'; interface File { name: string, size: number | string, type: string } @Component({ selector: 'app-root', template: ` <div> <div *ngFor="let file of files"> <p>{{ file.name }}</p> <p>{{ file.size | filesize: 'MB' }}</p> </div> <hr> <div *ngFor="let file of mapped"> <p>{{ file.name }}</p> <p>{{ file.size }}</p> </div> </div> `, providers: [ FileSizePipe ] }) export class AppComponent implements OnInit { files: File[]; mapped: File[]; constructor( private fp: FileSizePipe ) { } ngOnInit() { this.files = [ { name: 'logo.svg', size: 2120109, type: 'image/svg' }, { name: 'banner.jpg', size: 18029, type: 'image/jpg' }, { name: 'background.png', size: 1784562, type: 'image/png' } ]; this.mapped = this.files.map((file) => ({ name: file.name, type: file.type, size: this.fp.transform(Number(file.size), 'mb') })); } }
As we can see, we use 'providers' keyword in the @Component:
providers: [
FileSizePipe
]
This enable us to inject pipe into component:
constructor( private fp: FileSizePipe ) { }
Then we just need to call transform method on the pipe:
this.mapped = this.files.map((file) => ({ name: file.name, type: file.type, size: this.fp.transform(Number(file.size), 'mb') }));
In the html. we don't need to use '|filesize: 'MB'' anymore:
<div *ngFor="let file of mapped"> <p>{{ file.name }}</p> <p>{{ file.size }}</p> </div>