• [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>
  • 相关阅读:
    启用 Win10 的 Linux 子系统
    破解 RHEL7.3 的 root 密码
    实战:tcpdump抓包分析三次握手四次挥手
    grep中的正则表达式
    快速配置yum本地源
    Kubernetes 集群搭建(下)
    从事游戏行业也有10年,让我来说下游戏的本质,为什么上瘾。
    Egret 生成 自带EUI 的微信小游戏 踩坑!
    JMeter入门
    像屎一样的 Spring Boot入门,总算有反应了
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6546157.html
Copyright © 2020-2023  润新知