2017-01-24 4 views
3

私はAngular2を学んでいます。私は1000カンマ区切りを追加して数値を書式化したいと思います。私が読んだ限り、これはPipesを使用して行うことができますが、事実は、htmlではなくjsファイル内のプログラムで番号をフォーマットしたいということです(var | numberのようにする)。Angular2 Component.jsのパイプを使用する

まず最初に、NumberPipeスタンドアロンパイプがあります(私が間違っていれば修正してください)。最も類似したものは、@ angular2/commonのCurrencyPipeです。だから私はこのようなものがあります:

import { Component } from '@angular/core'; 
import { CurrencyPipe } from '@angular/common'; 

@Component({ 
    templateUrl: 'test.component.html', 
    styleUrls: ['./test.component.scss'] 
}) 
export class TestComponent { 
    public myNumber = 1000; 

    constructor(private currencyPipe: CurrencyPipe) {  
     var formatted = this.currencyPipe().transform(this.myNumber, 'MXN', true); // Is this correct? 
    } 

} 

をしかし、それは私に次のエラースロー: 未処理の約束を拒否:CurrencyPipeなしプロバイダーを! ;ゾーン:角度; ...

私は間違っていますか?

ありがとうございます。

よろしく

+0

のように、このパイプの新しいインスタンスを手動で作成する必要があります。{{myNumber |通貨: 'USD':true}} ' – MrNew

+1

@MrNew APIからデータを取得してChart.jsグラフを描画しているので...ここにはHTMLがないので、{{myNumber |通貨}}、私はプログラムでデータをフォーマットする必要があります。 – didi3r

答えて

6

まず最初:あなたのパイプを宣言する必要がある - NgModule declarationsセクションに追加します。

declarations: [CurrencyPipe] 

二つ目:パイプは注射剤ではありませんので、あなたは、そのインスタンスを取ることができません角度依存性注入システムを使用することによって達成される。

var formatted = (new CurrencyPipe()).transform(this.myNumber, 'MXN', true); 
+1

これはうまくいきますが、このようにインスタンスを作成するときにCurrencyPipeにパラメータとしてロケールID文字列を渡す必要がありました。return new CurrencyPipe( 'es-MX')。transform(this.myNumber、 'MXN'、true) ; – didi3r

+0

@Daniel Kucal - パイプをプロバイダの配列に追加することによって、パイプを提供することを提案しました。これは混乱しているように見えます。これまでのところ、サービスだけが提供されているので、コンポーネント、パイプ、ディレクティブは 'Imports'配列に 'Imported'しなければなりません。 ここに何か迷っていますか? –

+1

こんにちは@DeepakPathak、あなたの質問のおかげで、ここの指示は古く、エラーを引き起こしていた。以前のAngularバージョンでは、**コンポーネントの**(それは重要な)プロバイダにパイプを追加して作業していましたが、私はその答えを更新しました。コンポーネント、パイプ、ディレクティブは '宣言'に置かなければなりません。 'imports'は一つのNgModuleを別のものにインポートするためのものです。 –

関連する問題