是否可以覆盖内置的Angular 2管道,以便它们可以在全球范围内使用?

时间:2016-01-27 17:26:13

标签: angular

我想覆盖“日期”管道并享受全局访问的好处,就像内置管道一样 - 也就是说,避免在每个组件注释中导入和使用pipes []数组。这可能吗?

3 个答案:

答案 0 :(得分:15)

是的,您可以使用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,示例有效。

答案 1 :(得分: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}]);

答案 2 :(得分:2)

Eric Martinez的回答很好!请记住,Angular4中不推荐使用PLATFORM_PIPES。 Angular4中的平台管道通过app.modules配置:

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