Jawaban lain tidak bekerja di sudut 5?
Saya mendapat kesalahan karena DatePipe bukan penyedia, jadi tidak bisa disuntikkan. Salah satu solusinya adalah dengan menempatkannya sebagai penyedia dalam modul aplikasi Anda, tetapi solusi pilihan saya adalah dengan instantiate.
Instantiate itu di mana diperlukan:
Saya melihat kode sumber DatePipe untuk melihat bagaimana ia mendapatkan lokal: https://github.com/angular/angular/blob/5.2.5/packages/common/src/pipes/date_pipe.ts#L15-L174
Saya ingin menggunakannya di dalam pipa, jadi contoh saya adalah di dalam pipa lain:
import { Pipe, PipeTransform, Inject, LOCALE_ID } from '@angular/core';
import { DatePipe } from '@angular/common';
@Pipe({
name: 'when',
})
export class WhenPipe implements PipeTransform {
static today = new Date((new Date).toDateString().split(' ').slice(1).join(' '));
datePipe: DatePipe;
constructor(@Inject(LOCALE_ID) private locale: string) {
this.datePipe = new DatePipe(locale);
}
transform(value: string | Date): string {
if (typeof(value) === 'string')
value = new Date(value);
return this.datePipe.transform(value, value < WhenPipe.today ? 'MMM d': 'shortTime')
}
}
Kuncinya di sini adalah mengimpor Suntikan, dan LOCALE_ID dari inti sudut, dan kemudian menyuntikkannya sehingga Anda dapat memberikannya ke DatePipe untuk membuat instantiate dengan benar.
Jadikan DatePipe sebagai penyedia
Di modul aplikasi Anda, Anda juga bisa menambahkan DatePipe ke array penyedia Anda seperti ini:
import { DatePipe } from '@angular/common';
@NgModule({
providers: [
DatePipe
]
})
Sekarang Anda bisa menyuntikkannya ke konstruktor di mana diperlukan (seperti dalam jawaban cexbrayat).
Ringkasan:
Salah satu solusi yang berhasil, saya tidak tahu yang mana sudut akan dianggap paling "benar" tetapi saya memilih untuk instantiate secara manual karena sudut tidak menyediakan datepipe sebagai penyedia itu sendiri.