スイスドイツ語の数値形式は「100'000.00」のようになります(「100,000.00」ではありません)。どうすれば変更できますか? number_pipe.jsの設定をen-USからde-CHに変更しようとしましたが、成功しませんでした。
var defaultLocale: string = 'de-CH';
回避策はありますか、または独自のパイプを実装する必要がありますか?
numeralJに基づいて単純なパイプを作成し、数値をフォーマットすることができます
アプリに必要なロケールが1つだけの場合は、現時点(@angular〜2.4.0)でロケールプロバイダーを@NgModuleに登録できます。
@NgModule({
...
providers: [
{provide: LOCALE_ID, useValue: "de-CH"}
]
})
export class AppModule {}
以下は私の解決策であり、誰かに役立ちます。
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'amountConverter'
})
export class AmountConverterPipe implements PipeTransform {
transform(value: number | string, locale?: string): string {
return new Intl.NumberFormat(locale, {
minimumFractionDigits: 2
}).format(Number(value));
}
}
HTMLでは次のように使用できます
<span class="strong">{{Price | amountConverter:locale}}</span>
数値形式はロケールの値に応じて変わります。
詳細は https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat を参照してください。
私にとって最良のオプションは、有名な https://www.npmjs.com/package/numeral パッケージでした。 (彼はmoment.js
と同じ論理で動作します)
それをインストールするには:npm i [email protected]
およびタイプnpm i --save-dev @types/[email protected]
ts
ファイルでは、次のように使用できます。
`R$ ${numeral(<your-model-value>).value().toLocaleString()}`
HTMLテンプレートの場合、次のようにPipe
を作成できます。
import {Pipe, PipeTransform} from '@angular/core';
import * as numeral from 'numeral';
@Pipe({
name: 'numberLocale'
})
export class NumberLocalePipe implements PipeTransform {
transform(value: any, args?: any): any {
const numeralNumber = numeral(value);
return numeralNumber.value().toLocaleString();
}
}
さらに、currency(およびロケール)の場合、通貨マスクにはパッケージng2-currency-mask
を使用することをお勧めしますHTML(ただし、ts
ファイルでは、モデルオブジェクトのsaveの前に、numeral
を使用してモデルのバインドされた値を「変換」する必要があります。
HTMLテンプレートでのng2-currency-mask
の使用:
<input [(ngModel)]="model.value"
[options]="{ prefix: 'R$ ', thousands: '.', decimal: ',' }"
allowNegative="false" currencyMask>
そして、モデルのsaveの前のts
で:
if(this.model.value)
this.model.value = numeral(this.model.value).value();