2016-01-27 22 views

答えて

14

はい、PLATFORM_PIPESを使用して、パイプdateをハイジャックするカスタムパイプと名前を追加できます。

@Pipe({ 
    name : 'date' // Hijacks the 'date' pipe 
}) 
class CustomDatePipe { 
    transform(val, args) { 
    return /* do something new with the value */; 
    } 
} 

@Component({ 
    selector: 'my-app', 
    template : '{{mydate | date}}', 
}) 
export class App { 
    mydate = Date.now(); 
} 

// Provides the CustomDatePipe globally 
bootstrap(App, [provide(PLATFORM_PIPES, {useValue: [CustomDatePipe], multi: true})]); 

このようにして、コンポーネントのpipesプロパティに毎回指定する必要はありません。

ここには、例として働いているplnkrがあります。

+0

パイプはユニットテストでもグローバルに使用できるようにするために何が必要なのか分かりますか? –

2

はい、次の方法で使用PLATFORM_PIPES

https://angular.io/docs/ts/latest/api/core/index/PLATFORM_PIPES-let.html

import {PLATFORM_PIPES} from '@angular/core'; 
import {OtherPipe} from './myPipe'; 
@Component({ 
    selector: 'my-component', 
    template: ` 
    {{123 | other-pipe}} 
    ` 
}) 
export class MyComponent { 
    ... 
} 
bootstrap(MyComponent, [{provide: PLATFORM_PIPES, useValue: [OtherPipe], multi:true}]); 
1

エリック・マルティネス」答えは正常に動作します! PLATFORM_PIPESはAngular4で廃止予定です。 Angular4のプラットフォームパイプは、app.modulesを介して設定されます。

/** 
* `AppModule` 
*/ 
@NgModule({ 
    ... 
    providers: [ 
     ... 
     CustomDatePipe 
    ] 
}) 
+0

テスト用に(Vilmantas Baranauskasの質問に答えるために):パイプ自体のテストと明示的に呼び出されるテストトランスフォームにテストを書くことができます。新しいCustomDatePipe()。transform(入力) –

関連する問題