【发布时间】:2021-04-11 08:01:39
【问题描述】:
我想实现什么?
我希望我的 Angular Material(v11) 日期选择器在 Angular 版本 11 项目中使用 DD-MM-YYYY 格式。
我尝试了什么?
我尝试使用 MatMomentDateModule 但这使用了 moment.js 库。这反过来将使用包中的所有语言环境,从而将包大小增加 400kb。我已将CUSTOM_DATE_FORMATS 添加到我的app.module.ts 的提供者中,如下所示:
const CUSTOM_DATE_FORMATS = {
parse: {
dateInput: 'DD-MM-YYYY',
},
display: {
dateInput: 'DD-MM-YYYY',
monthYearLabel: 'MMMM YYYY',
dateA11yLabel: 'LL',
monthYearA11yLabel: 'MMMM YYYY',
},
};
这可行,但如前所述,捆绑包大小严重增加,我不使用任何语言环境。
有没有办法在不使用 moment.js 库的情况下格式化我的日期 DD-MM-YYYY?
或
moment.js 是否可以通过某种方式进行 treeshak,以便我只使用我需要的东西?
【问题讨论】:
-
如果我没记错的话 NativeDateModule 使用相同的注入令牌,即 MAT_DATE_FORMATS。因此,您应该能够在不使用 MomentDateAdapter 的情况下为此添加自定义提供程序。虽然不确定解析 - 我会尝试在空闲时间设置闪电战并检查。
-
哦,真的吗?我认为那是 moment.js 特定的。一定会很感激闪电战!
-
我的立场是正确的 - 一定是使用 MomentDateAdapter 的方式太多了。 github.com/angular/components/blob/master/src/material/core/… 它只使用 MAT_DATE_LOCALE,所以肮脏的出路是在组件内提供语言环境并收工。其他肮脏的选择是扩展 NativeDateAdapter 并覆盖格式/解析方法,以便它不使用语言环境,而是使用您定义的格式。最好的解决方案是编写自定义 DateAdapter 并改用它。抱歉,也许有人想出了更好的解决方案。
标签: angular datepicker angular-material momentjs