Angular 如何在延迟加载的ngModule中通过shared.module加载服务,该ngModule只实例化了一次,尽管forRoot()

Angular 如何在延迟加载的ngModule中通过shared.module加载服务,该ngModule只实例化了一次,尽管forRoot(),angular,angular2-services,ng2-translate,Angular,Angular2 Services,Ng2 Translate,如何通过SharedModule在惰性加载的ngModule中作为单例加载服务 如何在延迟加载的ngModule中作为单例加载服务 我有一个SharedModule,它提供了i18n和API等多种服务。这些服务是自己的模块,它们提供自己的forRoot功能。现在,我想使用forRoot从一个lacy加载的模块中的SharedModule加载服务,这样就不会通过依赖项注入创建新实例 我尝试了以下方法,但似乎没有任何效果 shared.module.ts import {I18nModule} fr

如何通过SharedModule在惰性加载的ngModule中作为单例加载服务

如何在延迟加载的ngModule中作为单例加载服务

我有一个SharedModule,它提供了i18n和API等多种服务。这些服务是自己的模块,它们提供自己的forRoot功能。现在,我想使用forRoot从一个lacy加载的模块中的SharedModule加载服务,这样就不会通过依赖项注入创建新实例

我尝试了以下方法,但似乎没有任何效果

shared.module.ts

import {I18nModule} from "./i18n/i18n.module";
import {ApiModule} from "./api/api.module";

@NgModule({
  exports: [
    I18nModule,
    ApiModule
  ]
}
export class SharedModule {
  static forRoot():ModuleWithProviders {{
    return {
      ngModule: SharedModule,
      providers: [ ... I18nModule.forRoot().providers, ... ApiModule.forRoot().providers ]
    };
  }
}
@NgModule({
    declarations: [AppComponent],
    imports: [
        BrowserModule,
        routing,
        SharedModule.forRoot(),
    ],
    providers: [
    ],
    bootstrap: [AppComponent]
})
export class AppModule {
}
app.module.ts

import {I18nModule} from "./i18n/i18n.module";
import {ApiModule} from "./api/api.module";

@NgModule({
  exports: [
    I18nModule,
    ApiModule
  ]
}
export class SharedModule {
  static forRoot():ModuleWithProviders {{
    return {
      ngModule: SharedModule,
      providers: [ ... I18nModule.forRoot().providers, ... ApiModule.forRoot().providers ]
    };
  }
}
@NgModule({
    declarations: [AppComponent],
    imports: [
        BrowserModule,
        routing,
        SharedModule.forRoot(),
    ],
    providers: [
    ],
    bootstrap: [AppComponent]
})
export class AppModule {
}

进入模块和forRoot/for child的一个很好的资源是链接根,就像问题工作中一样。只需确保在根app.module中使用SharedModule.forRoot()加载SharedModule,而不要在其他任何地方实例化服务。Angular沿着模块向下移动,直到根模块

import {I18nModule} from "./i18n/i18n.module";
import {ApiModule} from "./api/api.module";

@NgModule({
  exports: [
    I18nModule,
    ApiModule
  ]
}
export class SharedModule {
  static forRoot():ModuleWithProviders {{
    return {
      ngModule: SharedModule,
      providers: [ ... I18nModule.forRoot().providers, ... ApiModule.forRoot().providers ]
    };
  }
}

继续并在该服务的可注入装饰器中添加providedIn:“root”

服务将在以下情况下加载:使用服务加载的任何模块。 该服务将有一个实例

重要提示:请勿将其添加到输入模块(app.module.ts)的导入中。如果您将其添加到那里,它将与应用程序的第一次加载一起加载