2016-01-27 64 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(輸入) –

相關問題