我正在一个Angular9应用程序上工作,这个应用程序可以处理日期。它显示和更新几个<mat-datepicker>
字段。
我使用的是自定义MAT_DATE_FORMATS
和MomentDateAdapter
(@angular/material-moment-adapter
),来自https://www.npmjs.com/package/@angular/material-moment-adapter。
我使用了以下代码,运行良好:
export const APP_MOMENT_DATE_FORMATS =
{
parse: {},
display: {
dateInput: 'YYYY/MM/DD/MM',
monthYearLabel: 'MMM YYYY',
dateA11yLabel: 'LL',
monthYearA11yLabel: 'MMMM YYYY'
}
};
//..
providers: [
{
provide: MAT_DATE_FORMATS, useValue: APP_MOMENT_DATE_FORMATS
},
{
provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]
}
]
// ..
Stackblitz演示:https://stackblitz.com/edit/angular-formatted-datepicker-vdtaqj?file=app%2Fdatepicker-overview-example.ts
现在,我想知道是否可以更新APP_MOMENT_DATE_FORMATS.display.dateInput
动态的值-例如:也许它将通过http请求从配置服务中设置,或者我将在接口中显示一个选择器。
示例:
export const APP_MOMENT_DATE_FORMATS =
{
// ..
display: {
dateInput: this.appService.dateInputFormat,
// ..
}
};
我知道我可以实现一个定制的日期适配器,如下所述:角2材料2数据采集数据格式。
但我想知道是否有另一种方法可以这样做,而不需要实现新的自定义日期适配器。
谢谢。
发布于 2021-10-13 15:20:22
在花了几个小时寻找解决方案之后,我提出了以下解决方案,只需简单地注入MAT_DATE_FORMATS并动态地更改它:
const APP_MOMENT_DATE_FORMATS =
{
parse: {
dateInput: 'MM/DD/YYYY',
},
display: {
dateInput: 'MM/DD/YYYY',
monthYearLabel: 'MMM YYYY',
dateA11yLabel: 'LL',
monthYearA11yLabel: 'MMMM YYYY'
}
};
@Component({
...
providers: [
{
provide: MAT_DATE_FORMATS, useValue: APP_MOMENT_DATE_FORMATS
},
{
provide: DateAdapter,
useClass: MomentDateAdapter,
deps: [MAT_DATE_LOCALE]
}
]
})
export class DatePickerComponent implements OnInit, OnDestroy {
constructor(@Inject(MAT_DATE_FORMATS) public data: any) {
data.parse.dateInput = 'DD/MM/YYYY'
data.display.dateInput = 'DD/MM/YYYY'
}
}
https://stackoverflow.com/questions/61364618
复制相似问题