Как загрузить сервис через shared.module в лениво загруженном ngModule, который создается только один раз, хотя forRoot()
Как я могу загрузить сервис через SharedModule как синглтон в лениво загруженном ngModule?
Как я могу загрузить сервис как одиночный в лениво загруженном ngModule?
У меня есть SharedModule, который предоставляет несколько сервисов, таких как i18n и API. Сервисы являются собственными модулями ng, которые предоставляют свои собственные функции forRoot. Теперь я хотел бы загрузить Сервисы из SharedModule внутри загруженного модуля с помощью forRoot, чтобы новый экземпляр не создавался путем внедрения зависимостей.
Я пробовал что-то вроде следующего, но ничего не работает
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 ]
};
}
}
app.module.ts
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
routing,
SharedModule.forRoot(),
],
providers: [
],
bootstrap: [AppComponent]
})
export class AppModule {
}
Ресурс goor для входа в модули и forRoot / for child - это http://blog.angular-university.io/angular2-ngmodule/
1 ответ
Цепочка корней как в вопросах работает. Просто убедитесь, что вы загружаете SharedModule с SharedModule.forRoot() в корневой app.module и не создаете экземпляры сервисов где-либо еще. Angular идет вниз по ngModules до корневого модуля.
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). Если вы добавите его туда, он загрузится при первой загрузке приложения.