この優れたブログ投稿に大まかに基づいて、RC6 に更新されたばかりの Angular2 アプリをバンドルしようとしています。
組み込みの DatePipe のみをラップする Pipe がありますが、null 引数を受け入れ、それを受け取った場合に何かを行うという違いがあります。RC6 では、これを更新して_locale
引数を DatePipe に渡す必要がありました。ここにパイプがあります:
import {Pipe, PipeTransform, Inject, LOCALE_ID} from '@angular/core';
import {DatePipe} from '@angular/common';
@Pipe({
name: 'myDate',
})
export class MyDatePipe implements PipeTransform {
constructor(@Inject(LOCALE_ID) private _locale: string){}
transform(value: any, pattern?: string): string {
if (value === null) {
return 'Not Available';
}
return new DatePipe(this._locale).transform(value, pattern);
}
}
この依存性注入の方法は、組み込みの DatePipe で使用される方法と同じです (私が知る限り)。
開発用にコンパイルして systemjs をロードすると、これは正常に機能します。ただし、ロールアップでバンドルした後、コンストラクターに渡すときです_locale
。null
バンドル内のインスタンス化は次のようになります。
this._pipe_myDate_0 = new MyDatePipe(this.parentInjector.get(LOCALE_ID));
// this.parentInjector.get(LOCALE_ID) == null
役立つ場合は、ロールアップ構成と tsconfigs を提供できますが、質問に多くのバルクが追加されるため、今のところ保留します。現在のバンドル プロセスは次のとおりです。
ngc(es2015) -> rollup(es2015) -> tsc(es5)
アプリの残りの部分はうまく機能しています!今のところ、'en-US'
DatePipe に直接渡すことで問題を回避していますが、なぜ機能しないのか気になり、適切に処理したいと考えています。