Câu trả lời khác không hoạt động trong góc 5?
Tôi đã gặp lỗi vì DatePipe không phải là nhà cung cấp, vì vậy nó không thể được tiêm. Một giải pháp là đặt nó làm nhà cung cấp trong mô-đun ứng dụng của bạn nhưng giải pháp ưa thích của tôi là khởi tạo nó.
Khởi tạo nó khi cần thiết:
Tôi đã xem mã nguồn của DatePipe để xem làm thế nào nó có được miền địa phương: https://github.com/angular/angular/blob/5.2.5/packages/common/src/pipes/date_pipe.ts#L15-L174
Tôi muốn sử dụng nó trong một đường ống, vì vậy ví dụ của tôi là trong một đường ống khác:
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')
}
}
Chìa khóa ở đây là nhập Tiêm và LOCALE_ID từ lõi của góc, sau đó tiêm vào đó để bạn có thể đưa nó cho DatePipe để khởi tạo nó đúng cách.
Biến DatePipe thành nhà cung cấp
Trong mô-đun ứng dụng của bạn, bạn cũng có thể thêm DatePipe vào mảng nhà cung cấp của mình như thế này:
import { DatePipe } from '@angular/common';
@NgModule({
providers: [
DatePipe
]
})
Bây giờ bạn có thể chỉ cần đưa nó vào hàm tạo của bạn khi cần (như trong câu trả lời của cexbrayat).
Tóm lược:
Dù là giải pháp hiệu quả, tôi không biết một góc nào sẽ coi là "chính xác" nhất nhưng tôi đã chọn khởi tạo nó một cách thủ công vì góc không cung cấp datepipe như chính nhà cung cấp.