延迟加载模块中的角度使用服务

时间:2019-03-28 07:20:36

标签: angular angular-routing angular-services

我有一个名为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>

2 个答案:

答案 0 :(得分:1)

很高兴您能正常使用,但为了完成:

1)仔细检查您的服务在哪个模块中提供。通常,路由服务应该始终可访问,并且可以通过AppModule进行加载,或者取决于您是否遵循John Papa建议的项目结构CoreModule。

对于您而言,将服务导入AppRoutingModule中可能是合乎逻辑的。

2)如果您确实有一个需要延迟加载的服务,则最好将该服务包含在一个隔离的简单模块中,以便您可以在需要时延迟加载(简单地说,是一个小的模块)其中仅包含您可能需要或不需要的几件事)

答案 1 :(得分:0)

我刚刚忘记将提供程序添加到我的SharedModule中,如下所示:

providers: [
  RoutingService
]