Я реализовал в приложение ленивые модули загрузки, правильно настроен app.module.ts.Угловой 2 ленивый загруженный модуль - сервис не singleton
@NgModule({
declarations: [
AppComponent,
HeaderComponent,
HomeComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
routing
],
bootstrap: [AppComponent]
})
export class AppModule { }
Конфигурация маршрутизация
const APP_ROUTES: Routes = [
{ path: '', component: HomeComponent },
{ path: 'tools', loadChildren: 'app/tools/tools.module#ToolsModule' }
];
export const routing = RouterModule.forRoot(APP_ROUTES);
предоставление услуги через поле провайдеров в модуле ребенка и переключение между компонентами этого модуля reinstantiates этой услуги (проверено, войдя в конструкторе службы).
Услуга предоставляется только в модуле.
@NgModule({
declarations: [
ToolsComponent,
ToolsCartComponent,
ToolsContainerComponent,
ToolsFormComponent
],
imports: [
CommonModule,
toolsRouting
],
providers: [ToolsService]
})
export class ToolsModule { }
Почему не предоставляемый сервис не является ничем иным?
РЕДАКТИРОВАТЬ:
Я изменил пример plunker для ленивых модулей загрузки путем добавления услуги область действия только к этому модуль (модуль бэкэнд в данном случае). Переключение между BackendComponent и BackendSecondComponent (которые оба объявлены под ленивым загруженным модулем) служба получает пересоздана (отображается в консоли)
Имея ту же проблему, я считаю, что это потому, что метод .forRoot() не вызывается при ленивой загрузке модуля ... Я ищу аналогичное решение, но мне нужно, чтобы мой сервис был синглом. .cheers – Spock
У схожих проблем. Каждый раз, когда я открываю маршрут с ленивым загруженным модулем, создается новая услуга, несмотря на то, что поставщик услуг находится на уровне модуля. – mrh
Я уверен, что вы уже знаете об этом для работы (для предоставления услуги в модуле приложения). Рабочий плункер: https://plnkr.co/edit/UnxciqNLfL80BotWsYri?p=preview. Следует отметить, что это предупреждение: [Ссылка на документацию по модулю Angular2] (https://angular.io/docs/ts/latest/guide/ngmodule.html#!#why-_userservice_-isn-t-shared). В doc говорит: «Не указывайте поставщиков одноранговых приложений в общем модуле. Ленивый загруженный модуль, который импортирует этот общий модуль, сделает свою собственную копию службы». _ Это связано с этим, но я не знаю, основной причиной. – echonax