11

開発中のコンポーネントで関数DatePipeを使用するために、Angular2 アプリでオブジェクトをインスタンス化しようとしています。transform(...)

// ...
import { DatePipe } from '@angular/common';

@Component({...})
export class PanelComponent implements OnInit {
    // ...
    datePipe: DatePipe = new DatePipe(); // Error thrown here
    // ...
}

このコード セグメントは RC5 で正常に動作しました。現在、Angular2 の最終リリースにアップグレードしようとしていますが、実行時にこのエラーが発生しng serveますng build

~/tmp/broccoli_type_script_compiler-input_base_path-XitPWaey.tmp/0/src/app/panel/panel.component.ts (33, 24): 
Supplied parameters do not match any signature of call target.

この問題を解決するにはどうすればよいですか? パイプをインスタンス化する別の方法はありますか? または、Angular はコンポーネント内のパイプのインスタンス化のサポートを停止しましたか?

4

2 に答える 2

28

ソース コードを見ると、DatePipe コンストラクターが必須パラメーターを要求していることがわかります。

constructor(@Inject(LOCALE_ID) private _locale: string) {}

DataPipe のデフォルトのロケールはありません

https://github.com/angular/angular/blob/2.0.0/modules/%40angular/common/src/pipes/date_pipe.ts#L97

そのため、typescript でエラーが発生します。このようにして、以下に示すように変数を開始する必要があります。

datePipeEn: DatePipe = new DatePipe('en-US')
datePipeFr: DatePipe = new DatePipe('fr-FR')
constructor() {
  console.log(this.datePipeEn.transform(new Date(), 'dd MMMM')); // 21 September
  console.log(this.datePipeFr.transform(new Date(), 'dd MMMM')); // 21 septembre
}

それがあなたを助けることを願っています!

于 2016-09-21T06:15:08.997 に答える