我正在开发带有延迟加载模块的angular 7应用程序。我也在使用角形材料组件。我想在datepicker组件中本地化并支持多个语言环境。
当应用程序语言更改时,我想对整个应用程序进行全局更改。可以通过DateAdapter.setLocale方法完成。 但是问题是,如果我在根模块上进行了更改,则在延迟加载的模块中也不会更改。
是的,延迟加载的模块具有其注入器并接收其DateAdapter,但其语言环境未设置为正确的语言适配器。
如何在整个应用程序中实现DateAdapter为单例?对于其他模块,有一个forChild()vs forRoot()API,但没有针对datepicker模块。
答案 0 :(得分:2)
对我来说,问题是我将DateAdapter
导入了SharedModule
,然后又将SharedModule
导入了AppModule
和其他LazyModule中。
要使DateAdapter
为单例服务,您应该提供DateAdapter
,而该DateAdapter
仅在应用程序的根级别使用一次,而不是在根级别和LazyModules中使用。
为此,请确保您导入提供MatNativeDateModule
的模块,例如AppModule
,仅在您的MatNativeDateModule
中(或像CoreModule一样仅导入一次的另一个根模块中)。不要在多个模块中或在像SharedModule这样多次导入的模块中导入import { MatNativeDateModule } from '@angular/material/core'
@NgModule({
declarations: [
AppComponent,
],
imports: [
MatNativeDateModule
],
bootstrap: [AppComponent]
})
export class AppModule { }
。
export class AppComponent implements OnInit {
constructor(private dateAdapter: DateAdapter<Date>) {}
ngOnInit(): void {
this.dateAdapter.setLocale('en')
}
}
然后,您可以在AppComponent中设置区域设置。
{{1}}
并且具有设置区域设置的相同DateAdapter将注入到您的LazyModules中。