zoukankan      html  css  js  c++  java
  • [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>
  • 相关阅读:
    批处理 星号的替换
    1.1.1 Windows系统内置工具——ipconfig
    2.1 以太网回顾
    书面实验1.3 识别冲突域和广播域
    书面实验1.1:OSI问题
    1.3 OSI模型
    1.2 网络互联模型
    1.1
    如何开启系统服务
    如何查看或启用打开windows功能
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6546157.html
Copyright © 2011-2022 走看看