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>
  • 相关阅读:
    sql交集、差集、并集
    控件自适应文本宽度
    pivot列行转换,自动计算分组,解决groupby问题
    echart-scatter使用散点图,带坐标和项目名称
    下载文件根据浏览器判断文件名,解决兼容性问题
    sql中类型转换涉及的性能差异之convert和cast
    js使用正则表达式对文本框进行限制输入
    Aspose.Words.dll根据模板生成word详解
    Windows服务开发
    SqlBulkCopy学习(导入海量数据的类)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6546157.html
Copyright © 2011-2022 走看看