Сервис углового использования в загруженном модуле - PullRequest
0 голосов
/ 28 марта 2019

У меня есть служба с именем 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 ]

1 голос
/ 28 марта 2019

Рад, что у вас все получилось, но ради завершения:

1) Дважды проверьте, в каком модуле предоставляются ваши услуги. Как правило, служба маршрутизации всегда должна быть доступна, и имеет смысл загружать ее с вашим AppModule или в зависимости от того, соблюдаете ли вы предложенную Джоном Папой структуру проекта, CoreModule.

В вашем случае может быть логично импортировать службу в AppRoutingModule.

2) Если у вас есть служба, которую вы хотели бы загрузить с отложенной загрузкой, было бы полезно включить эту службу в изолированный простой модуль, который вы можете загружать с отложенной загрузкой, когда вам это необходимо (проще говоря, небольшой модуль). это просто включает в себя несколько вещей, которые вам могут или не могут понадобиться)

0 голосов
/ 28 марта 2019

Я просто забыл добавить провайдера в мой SharedModule следующим образом:

providers: [
  RoutingService
]
...