JavaScript

超轻量级php框架startmvc

Angular6使用forRoot() 注册单一实例服务问题

更新时间:2020-09-09 18:48:01 作者:startmvc
假如我们有一个shareModule来存放公用的组件(Component)、指令(Directive)、管道(Pipe)、服务(Servic

假如我们有一个shareModule来存放公用的组件(Component)、指令(Directive)、管道(Pipe)、服务(Service),为避免各个子模块引用shareModule时造成App中有多个一样的单一实例服务的问题。我们可以在shareModule中建立同意的App层级的服务。


ShareModule
import { NgModule, ModuleWithProviders } from '@angular/core';
@NgModule({
 imports: [
 HttpModule,
 JsonpModule,
 ...
 ],
 declarations: [
 ShowItDirective,
 ...
 ],
 exports: [
 ShowItDirective,
 ...
 ]
})
export class ShareModule{
 // 给shareModule添加forRoot
 static forRoot(): ModuleWithProviders {
 return {
 ngModule: ShareModule,
 providers: [
 MessageService,
 NotifyService,
 ... any service
 ],
 };
 }
}
AppModule
@NgModule({
 declarations: [
 AppComponent,
 ],
 imports: [
 // 使用
 ShareModule.forRoot(),
 ],
 providers: [
 
 ],
 bootstrap: [AppComponent]
})
export class AppModule { }

这样ShareModule中每一个service都只在app中注册了一个实例,也避免了每次使用service都要provider的问题。

ERROR NullInjectorError: StaticInjectorError(AppModule)[SurveyComponent -> PermissionCheckerService]: NullInjectorError: No provider for PermissionCheckerService!

总结

以上所述是小编给大家介绍的Angular6使用forRoot() 注册单一实例服务问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!