我有一个名为routing.service
的服务,它订阅路由事件,当参数更改时,它会更新Translate服务。如下构造函数:
this.router.events.subscribe(val => {
if (val instanceof ActivationEnd ) {
let myVal = val.snapshot.params.lang;
this.currentLang = myVal;
this.translate.use(myVal);
this.translate.setDefaultLang(config.defaultLang);
}
});
我有一个导入到app模块的共享模块。在共享组件中一切正常:
<div [innerHTML]="'HOME.TITLE' | translate"></div>
但在我的懒惰加载模块不工作。即使我无法访问this.currentLang
内部的subscribe
。任何的想法?
更新:以下是有关我的代码的更多详细信息:
app.module:
imports:[
CommonModule,
BrowserModule,
FormsModule,
NgtUniversalModule,
TransferHttpCacheModule,
HttpClientModule,
AppRoutingModule,
SharedModule
],
shared.module:
imports: [
CommonModule,
RouterModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateUniversalLoader,
}
})
],
exports: [
HeaderComponent,
TranslateModule
]
懒惰loaded.module:
imports: [
CommonModule,
FormsModule,
CustomersRoutingModule,
SharedModule,
],
我的app.component:
<!-- This is component of my shared.module and translation works fine here, but not in lazy loaded modules -->
<saz-header></saz-header>
<router-outlet></router-outlet>
很高兴你让它工作,但为了完成:
1)仔细检查您提供的服务模块。通常,应始终可以访问路由服务,并且使用AppModule加载,或者根据John Papa建议的项目结构是否为CoreModule,这是有意义的。
在您的情况下,在AppRoutingModule中导入服务可能是合乎逻辑的。
2)如果你有一个你想要延迟加载的服务,将所述服务包含在一个孤立的,简单的模块中可能是有益的,你可以在需要时延迟加载(简单地说,只需要包含一个小模块)您可能需要或可能不需要的一些事情)
我忘了将提供程序添加到我的SharedModule中,如下所示:
providers: [
RoutingService
]