gpt4 book ai didi

angular - 覆盖 Angular 默认日期管道

转载 作者:行者123 更新时间:2023-12-02 16:49:49 25 4
gpt4 key购买 nike

我需要覆盖默认的 Angular 7 日期管道格式(mediumshortfullDate 等),因为我不这样做不想使用两个日期管道(默认一个和自定义一个),所以我做了以下操作,并且想知道这样做是个好主意:

// extend-date.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
import { DatePipe } from '@angular/common';

@Pipe({
name: 'date'
})
export class ExtendDatePipe extends DatePipe implements PipeTransform {
constructor() {
super('en-US');

this.customDateFormats = {
medium: '...',
short: '...',
fullDate: '...',
longDate: '...',
mediumDate: '...',
shortDate: '...',
mediumTime: '...',
shortTime: '...'
};
}

transform(value: any, args?: any): any {
switch (args) {
case 'medium':
return super.transform(value, this.customDateFormats.medium);
case 'short':
return super.transform(value, this.customDateFormats.short);
case 'fullDate':
return super.transform(value, this.customDateFormats.fullDate);
case 'longDate':
return super.transform(value, this.customDateFormats.longDate);
case 'mediumDate':
return super.transform(value, this.customDateFormats.mediumDate);
case 'shortDate':
return super.transform(value, this.customDateFormats.shortDate);
case 'mediumTime':
return super.transform(value, this.customDateFormats.mediumTime);
case 'shortTime':
return super.transform(value, this.customDateFormats.shortTime);
default:
return super.transform(value, args);
}
}
}

// app.component.html
{{ someDate | date: 'medium' }} // The custom format will be displayed

如果我使用类似{{ someDate | date: 'MM/dd/yyyy' }} 它也有效。

所以基本上,我想知道是否存在这种情况无法正常工作,或者也许有更好的方法来实现这一点,但采用不同的实现方式?

最佳答案

您错过了日期管道中的某些功能。除了format之外,还有timezonelocaleparameters .

可以覆盖默认管道,其中“最后”添加的管道将获得优先级。要覆盖整个应用程序中的 Angular 管道,只需将自定义管道添加到根 AppModule 的声明数组即可:

@NgModule({
//...
declarations: [
//...
ExtendDatePipe
]
})
export class AppModule {}

注意:曾经有一个 PLATFORM_PIPES 常量来覆盖全局/默认管道,但这已经是 removed

为了可读性并保持本地化和国际化的可能性,我只是将其更改为这样。:

@Pipe({
name: 'date'
})
export class ExtendDatePipe extends DatePipe implements PipeTransform {
readonly customFormats = {
medium: 'xxx',
short: 'xxx',
// ...
};

constructor(@Inject(LOCALE_ID) locale: string) {
super(locale);
}

transform(value: any, format = 'mediumDate', timezone?: string, locale?: string): string {
format = this.customFormats[format] || format;

return super.transform(value, format, timezone, locale);
}
}

关于angular - 覆盖 Angular 默认日期管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56020473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com