[Angular] Pipes as providers

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>

 

posted @   Zhentiw  阅读(274)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2016-03-14 [Node.js] Use "prestart" in scripts
2016-03-14 [Node.js] Using ES6 and beyond with Node.js
2016-03-14 [RxJS] Wrap up
2016-03-14 [RxJS] Sharing Streams with Share
2015-03-14 [Node.js] Using npm link to use node modules that are "in progress"
2015-03-14 [Server Running] [Node.js, PM2] Using PM2 To Keep Your Node Apps Alive
点击右上角即可分享
微信分享提示