0

問題: 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 をコンパイルする方法に関係していると思います。完全にはわかりません。誰かが同様の問題に遭遇したかどうか、そして魔法の解決策があるかどうかを知りたかっただけです。ありがとうございました!

4

1 に答える 1