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

问题描述 投票:0回答:2

我有一个名为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>
angular angular-routing angular-services
2个回答
1
投票

很高兴你让它工作,但为了完成:

1)仔细检查您提供的服务模块。通常,应始终可以访问路由服务,并且使用AppModule加载,或者根据John Papa建议的项目结构是否为CoreModule,这是有意义的。

在您的情况下,在AppRoutingModule中导入服务可能是合乎逻辑的。

2)如果你有一个你想要延迟加载的服务,将所述服务包含在一个孤立的,简单的模块中可能是有益的,你可以在需要时延迟加载(简单地说,只需要包含一个小模块)您可能需要或可能不需要的一些事情)


0
投票

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

providers: [
  RoutingService
]
© www.soinside.com 2019 - 2024. All rights reserved.