我有一个名为routing.service
的服务,该服务订阅路由事件,并且当参数更改时,它会更新翻译服务。在构造函数中如下所示:
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);
}
});
我有一个导入到应用程序模块中的共享模块。在共享组件中,一切正常:
<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
]
lazy-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>
答案 0 :(得分:1)
很高兴您能正常使用,但为了完成:
1)仔细检查您的服务在哪个模块中提供。通常,路由服务应该始终可访问,并且可以通过AppModule进行加载,或者取决于您是否遵循John Papa建议的项目结构CoreModule。
对于您而言,将服务导入AppRoutingModule中可能是合乎逻辑的。
2)如果您确实有一个需要延迟加载的服务,则最好将该服务包含在一个隔离的简单模块中,以便您可以在需要时延迟加载(简单地说,是一个小的模块)其中仅包含您可能需要或不需要的几件事)
答案 1 :(得分:0)
我刚刚忘记将提供程序添加到我的SharedModule中,如下所示:
providers: [
RoutingService
]