問題: Angular アプリにコンポーネントを含む外部ライブラリがあります。このコンポーネントの一部は、内部で Angular DatePipe を使用して日付を「shortDate」形式に変換します。クライアントがその特定のライブラリを使用する必要があるため、他のコンポーネントを使用したり、カスタム コンポーネントを実装したりするオプションは実際にはありません。もちろん、「shortDate」形式も必要ありません。
組み込みの Angular DatePipe を拡張してみました。次のように:
import { DatePipe } from '@angular/common';
import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'date'
})
export class DateExtendedPipe extends DatePipe implements PipeTransform {
static readonly DEFAULT_FORMAT = 'dd/MM/yyyy';
constructor(@Inject(LOCALE_ID) locale: string) {
super(locale)
}
transform(value: Date | string | number, format?: string, timezone?: string, locale?: string): string | null;
transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null;
transform(value: Date | string | number | null | undefined, format?: string, timezone?: string, locale?: string): string | null {
console.log('date format');
const ghibFormat = format && format !== 'shortDate' ? format : DateExtendedPipe.DEFAULT_FORMAT;
return super.transform(value, ghibFormat, timezone, locale);
}
}
これは、現在アプリに実装しているすべてのカスタム コンポーネントで機能します。「my_var |」を使用するたびに date' Angular の代わりに私の拡張パイプをトリガーします。
node_modules コンポーネントに関しては、拡張されたものの代わりにデフォルトの Angular DatePipe を引き続きトリガーします。これは、角度アーキテクチャが構築され、コンパイラが最初に node_modules をコンパイルする方法に関係していると思います。完全にはわかりません。誰かが同様の問題に遭遇したかどうか、そして魔法の解決策があるかどうかを知りたかっただけです。ありがとうございました!