21

我想为基本的 angular2 管道添加一些额外的功能。

IE。在货币管道上完成了一些额外的格式化。为此,我想在自定义管道的组件代码中使用现有管道。

有什么办法可以做到这一点?

@Pipe({name: 'formatCurrency'})
export class FormatCurrency implements PipeTransform {
  transform(value:number, args:string[]) : any {
    var formatted = value/100;

    //I would like to use the basic currecy pipe here.
    ///100 | currency:'EUR':true:'.2'

    return 'Do some extra things here ' + formatted;
  }
}
4

3 回答 3

31

您可以扩展CurrencyPipe,如下所示:

export class FormatCurrency extends CurrencyPipe implements PipeTransform {
  transform(value: any, args: any[]): string {
    let formatedByCurrencyPipe = super.transform(value, args);
    let formatedByMe;
    // do your thing...
    return formatedByMe;
  }
}

如果您查看源代码,这类似于角管道的工作方式......


(由问题作者添加)

不要忘记导入 CurrencyPipe 类

import {CurrencyPipe} from 'angular2/common'; 
于 2016-03-05T00:29:23.050 回答
15

或者,您可以注入 CurrencyPipe:

bootstrap(AppComponent, [CurrencyPipe]);

管道:

@Pipe({
    name: 'mypipe'
})
export class MyPipe {
    constructor(private cp: CurrencyPipe) {
    }
    transform(value: any, args: any[]) {
        return this.cp.transform(value, args);
    }
}
于 2016-03-05T05:49:02.087 回答
-1

您可以在自定义管道中使用 Angular 管道。

首先,在您的管道文件中,您必须导入所需的管道,例如。

import { SlicePipe } from '@angular/common';

然后在您的自定义管道中使用它:

  transform(list: any, end: number, active: boolean = true): any {
return active ? new SlicePipe().transform(list, 0, end) : list;

}

在 A6 上测试。

于 2018-09-26T13:35:32.513 回答