2016-09-21 14 views
5

transform(...)機能を使用するために、Angular2アプリでDatePipeオブジェクトをインスタンス化しようとしています。DatePipeをインスタンス化できません

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

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

このコードセグメントはRC5で正常に機能しました。今、私は

~/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. 

がどのように私はこの問題を解決することができ、Angular2最終リリースにアップグレードしようとしていると私はng serveまたはng buildを実行すると、このエラーを取得していますか?パイプをインスタンス化する別の方法はありますか?あるいは、Angularはコンポーネント内でパイプのインスタンス化をサポートすることを止めましたか?

+0

パイプを間違った方法で使用しています。手動でパイプをインスタンス化する必要はありません。代わりにDIを使用してください。 –

答えて

14

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

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

理由だデータパイプ

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 
} 

が、それはあなたのお役に立てば幸い!

+0

ありがとうございます。これは私の問題を解決します。どうやら、この新しいコンストラクタはAngular2 RC6で導入されました。プルリクエスト - [fix(i18n):通貨/日付/番号のパイプで注入されたロケールを使用する](https://github.com/angular/angular/commit/)をRC5から最終リリースにアップグレードしていたので、 0a053a4cd52312e03179a3dfb5b6903aaa5a5a2e) –

0

すべてが正常に見えますが、エラーはコードのどこにでもなければなりません。 私plunkerを参照してください:https://plnkr.co/edit/koDu6YmB131E6sXc6rKg?p=preview

import {Component, NgModule} from '@angular/core' 
import {BrowserModule} from '@angular/platform-browser' 
import {DatePipe} from '@angular/common'; 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 
    </div> 
    `, 
}) 
export class App { 

    dPipe = new DatePipe(); 

    constructor() { 
    this.name = 'Angular2' 
    console.dir(this.dPipe); 
    console.log(this.dPipe.transform(new Date(), 'dd.MM')); 
    } 
} 

@NgModule({ 
    imports: [ BrowserModule ], 
    declarations: [ App ], 
    bootstrap: [ App ] 
}) 
export class AppModule {} 

そして@Harryニン..あなたがパイプを挿入することはできません!

+0

私はplunkerがまだAngular2の古いバージョンを使用していると思います。 @ yurzuiの答えに続いて、私はDatePipeクラスの履歴をチェックし、このプルリクエストによってRC6に新しいコンストラクタが導入されていることがわかりました。 [fix(i18n):通貨/日付/番号パイプに注入ロケールを使用](https://github.com/angular/angular/pull/11093) –

関連する問題