AngularJS では、次のような構文を使用して、サービスとコントローラー内でフィルター (パイプ) を使用できます。
$filter('date')(myDate, 'yyyy-MM-dd');
Angular では、このようにサービス/コンポーネントでパイプを使用することは可能ですか?
ベストアンサー1
Angular では通常どおり、依存性注入に頼ることができます。
import { DatePipe } from '@angular/common';
class MyService {
constructor(private datePipe: DatePipe) {}
transformDate(date) {
return this.datePipe.transform(date, 'yyyy-MM-dd');
}
}
モジュールのプロバイダー リストに追加しますDatePipe
。これを忘れると、エラーが発生しますno provider for DatePipe
。
providers: [DatePipe,...]
Angular 6のアップデート: Angular 6では、パイプで使用されるほぼすべての書式設定関数が公開されています。たとえば、formatDate
直接機能します。
import { formatDate } from '@angular/common';
class MyService {
constructor(@Inject(LOCALE_ID) private locale: string) {}
transformDate(date) {
return formatDate(date, 'yyyy-MM-dd', this.locale);
}
}
Angular 5以前DatePipe
: ただし、バージョン5まではIntl APIに依存していましたが、これはすべてのブラウザでサポートされているわけではありません(互換性表)。
古いバージョンのAngularを使用している場合は、Intl
問題を回避するためにプロジェクトにポリフィルを追加する必要があります。こちらをご覧ください関連する質問より詳しい回答については。