angular - Angular Material datepicker延迟加载
问题描述
我有一个 Angular 应用程序,其中包含多个延迟加载的模块。但是,当我将我的应用程序分解为这些模块时,我this.adapter.setLocale(locale);
的主模块停止工作。除了在 init 上手动设置每个模块中的语言环境之外,有没有办法跨模块填充此更改?
所以我可能设置了不同的语言环境this.adapter.setLocale()
,这似乎对日期选择器没有任何影响(它仍然使用“英国”)。当没有延迟加载的模块时,它运行良好。
我有一个 Material 的共享模块,然后我将它导入到其他模块中。
import { NgModule } from '@angular/core';
import {
MAT_DATE_LOCALE,
MatAutocompleteModule,
MatCheckboxModule,
MatDatepickerModule,
MatFormFieldModule,
MatInputModule,
MatSelectModule
} from "@angular/material";
import { MatMomentDateModule } from "@angular/material-moment-adapter";
@NgModule({
imports: [
MatInputModule,
MatDatepickerModule,
MatFormFieldModule,
MatMomentDateModule,
MatSelectModule,
MatAutocompleteModule,
MatCheckboxModule,
],
providers: [
{provide: MAT_DATE_LOCALE, useValue: 'uk'},
],
exports: [
MatInputModule,
MatDatepickerModule,
MatFormFieldModule,
MatMomentDateModule,
MatSelectModule,
MatAutocompleteModule,
MatCheckboxModule,
]
})
export class MaterialModule {
}
换句话说,我希望我的整个应用程序在 Material Datepicker 中跨不同的功能模块使用相同的语言环境。
解决方案
好的,它现在可以工作了。你必须使用ModuleWithProviders
import { CommonModule } from '@angular/common';
import { NgModule, ModuleWithProviders } from '@angular/core';
import { MAT_DATE_FORMATS, MAT_DATE_LOCALE, DateAdapter, NativeDateAdapter, MatDateFormats } from '@angular/material/core';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { Platform } from '@angular/cdk/platform';
import { registerLocaleData } from '@angular/common';
import localeDe from '@angular/common/locales/de';
import localeDeExtra from '@angular/common/locales/extra/de';
registerLocaleData(localeDe, 'de-De', localeDeExtra);
export const MY_FORMATS: MatDateFormats = {
parse: {
dateInput: {year: 'numeric', month: '2-digit', day: '2-digit'}
},
display: {
dateInput: {year: 'numeric', month: '2-digit', day: '2-digit'},
monthYearLabel: {year: 'numeric', month: 'short'},
dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},
monthYearA11yLabel: {year: 'numeric', month: 'long'}
},
};
@NgModule({
imports: [
CommonModule,
MatDatepickerModule
],
exports: [
MatDatepickerModule
]
})
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [
{ provide: LOCALE_ID, useValue: 'de-DE' },
{ provide: DateAdapter, useClass: NativeDateAdapter, deps: [MAT_DATE_LOCALE, Platform] },
{ provide: MAT_DATE_FORMATS, useValue: MY_FORMATS }
]
};
}
}
然后在你的 AppModule 中使用 SharedModule
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
BrowserAnimationsModule,
SharedModule.forRoot()
]
...
推荐阅读
- ssl - DNS 记录设置正确和服务器 IP 加载,但域仍然不起作用
- python - 未在数据框中填充 NaN 值
- c# - 使用新式身份验证从 SharePoint 下载文件
- apache-flink - 是否可以以编程方式设置 flink `state.checkpoint.dir`?
- reactjs - React Vis 水平十字准线
- server - 绝望的业务傻瓜寻求帮助 - SSH2 连接到 FTP 服务器
- firebase - 如何在发送到 Firebase 之前验证数据 - Flutter
- python - 从 pandas 数据框创建嵌套字典
- django - 持续集成 - 清理基于文件的变量 00:01 错误:作业失败:退出代码 1
- unity3d - 为什么 320x240 分辨率下的文字如此模糊或参差不齐?