1

この優れたブログ投稿に大まかに基づいて、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 をロードすると、これは正常に機能します。ただし、ロールアップでバンドルした後、コンストラクターに渡すときです_localenullバンドル内のインスタンス化は次のようになります。

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 に直接渡すことで問題を回避していますが、なぜ機能しないのか気になり、適切に処理したいと考えています。

4

1 に答える 1

1

ロケールごとにコンパイルします。

ngc --locale=en-US
于 2016-10-05T12:04:25.473 に答える