Angular 延迟加载模块中的角度使用服务
我有一个名为Angular 延迟加载模块中的角度使用服务,angular,angular-routing,angular-services,Angular,Angular Routing,Angular Services,我有一个名为routing.service的服务,它订阅路由事件,当参数更改时,它会更新Translate服务。在建造商中如下所示: this.router.events.subscribe(val => { if (val instanceof ActivationEnd ) { let myVal = val.snapshot.params.lang; this.currentLang = myVal; this.translat
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);
}
});
我有一个已导入应用程序模块的共享模块。在共享组件中,一切正常:
<div [innerHTML]="'HOME.TITLE' | translate"></div>
共享模块:
imports: [
CommonModule,
RouterModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateUniversalLoader,
}
})
],
exports: [
HeaderComponent,
TranslateModule
]
imports: [
CommonModule,
FormsModule,
CustomersRoutingModule,
SharedModule,
],
lazy-loaded.module:
imports: [
CommonModule,
RouterModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateUniversalLoader,
}
})
],
exports: [
HeaderComponent,
TranslateModule
]
imports: [
CommonModule,
FormsModule,
CustomersRoutingModule,
SharedModule,
],
我的应用程序组件:
<!-- 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>
我刚刚忘记将提供程序添加到我的SharedModule中,如下所示:
providers: [
RoutingService
]
很高兴你能成功,但为了完成: 1) 仔细检查提供服务的模块。一般来说,路由服务应该总是可访问的,并且与AppModule一起加载是有意义的,或者取决于您是否遵循John Papa建议的项目结构CoreModule 在您的情况下,在AppRoutingModule中导入服务可能是合乎逻辑的
2) 如果您确实有一个您希望延迟加载的服务,那么将该服务包含在一个独立的、简单的模块中可能是有益的,您可以在需要时延迟加载该模块(简单地说,一个只包含您可能需要或不需要的少量内容的小模块)我感觉如果您想使用router.service,您可能必须将SharedModule导入其他模块。延迟加载的模块将无法访问它,除非它们导入您的SharedModule。就个人而言,我建议将routing.service可能移动到AppModule中。把它放在那里,或者放在一个CoreModule@N15M0_jk我已经将SharedModule导入到我的另一个惰性模块中。您所说的
将您的routing.service可能移动到您的AppModule中是什么意思
Hmmm,这是不寻常的。当我提到将routing.service可能移动到AppModule中时,我假设routing.service不是AppModule中的提供商。请分享你的AppModule、SharedModule和延迟加载的模块文件,这样我们就可以看到所有东西是如何导入的了。请参见更新
部分。谢谢。Ops,我忘记在我的SharedModule组件中注入服务了。现在它工作得很好。谢谢,谢谢你的回答。但当我在AppModule中提供服务时,仍然在延迟加载的模块中,我无法访问该服务。我必须在SharedModule中提供它。请看这个演示:酷,很快就会查看它!给你,对不起,非常感谢。还有一个问题。我应该在AppModule或SharedModule中导入我的外部模块(在本例中为TranslateModule)?(我在自己的routing.service中使用TranslateService)