2016-03-05 65 views
7

我想向基本angular2管道添加一些附加功能。Angular2在自定义管道中使用基本管道

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

这有什么办法可以做到吗?

@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; 
    } 
} 

回答

14

可以扩展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; 
    } 
} 

如果你看一下source,这是类似于如何角管工作...


(由加问题作者)

不要忘记导入CurrencyPipe类

import {CurrencyPipe} from 'angular2/common'; 
+0

日Thnx!我添加了导入行到您的答案,必须搜索以找出CurrencyPipe的导入位置。 –

9

或者,你可以注入的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); 
    } 
} 
+3

我也喜欢这种方式。有没有另一种方式来CurrencyPipe提供者?将它添加到bootstrap中似乎有点混乱。我尝试没有成功如下: @Pipe({ 名: 'formatCurrency', 提供商:[CurrencyPipe], 管道:[CurrencyPipe] }) –

+0

好问题。我认为你也可以指定[CurrencyPipe]作为组件的依赖:providers:[CurrencyPipe]。我同意,它太糟糕了,它不适用于管道级别。 – pixelbits