Proporcionar un módulo de servicios de núcleo único en Angular 2
Traté de crear algún módulo central como en el tutorial, excepto un detalle, quiero proporcionar solo servicios. Entonces, mi CoreModule debería ser: proveedor de servicios singleton, porque no quiero proporcionar toneladas de servicios en AppModule como en las versiones de aplicación <= RC4. Traté de hacer eso pero no funciona. ¿Cometí algún error? Gracias por cualquier ayuda.
import {
ModuleWithProviders, NgModule,
Optional, SkipSelf } from '@angular/core';
import { CommonModule } from '@angular/common';
import { CommunicatePatientListService } from './services/communicate_patients_list.service';
import { HTTPPatientsListService } from './services/http_patients_list.service';
import { SharedService } from './services/shared_service';
@NgModule({
imports: [ CommonModule ],
providers: [
CommunicatePatientListService,
HTTPPatientsListService,
SharedService
],
exports: []
})
export class CoreModule {}
Actualización 2. Intenté diferentes formas de hacer las cosas que me proporcionaron y encontré un momento interesante.
Cuando importo en COREModule Singleton Services a través de la importación estándar, no funciona, pero cuando lo importé a través de alias System.js funciona ahora. Realmente me pregunto cómo funciona. Aquí está el código
CoreModule:
import {
ModuleWithProviders, NgModule,
Optional, SkipSelf } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HeaderModule } from './modules/header/header.module';
import { FooterComponent } from './modules/footer/footer.component';
//THAT DOESNT WORK
// import { CommunicatePatientListService } from './services/communicate_patients_list.service';
// import { HTTPPatientsListService } from './services/http_patients_list.service';
// import { SharedService } from './services/shared_service';
// import { SchedulerSharedService } from './services/scheduler_shared.service';
// import { FormChangeService } from './services/on_form_change.service';
//IT IS WORKING NOW
import { CommunicatePatientListService } from '%sharedServices%/communicate_patients_list.service';
import { HTTPPatientsListService } from 'httpPatientsListService';
import { SharedService } from 'sharedService';
import { SchedulerSharedService } from 'schedulerSharedService';
import { FormChangeService } from 'formChangeService';
@NgModule({
imports: [
CommonModule,
HeaderModule,
],
declarations: [
FooterComponent
],
exports: [
FooterComponent,
HeaderModule
]
})
export class CoreModule {
constructor (@Optional() @SkipSelf() parentModule: CoreModule) {
if (parentModule) {
throw new Error(
'CoreModule is already loaded. Import it in the AppModule only');
}
}
static forRoot(): ModuleWithProviders {
return {
ngModule : CoreModule,
providers: [
CommunicatePatientListService,
HTTPPatientsListService,
SharedService,
FormChangeService,
SchedulerSharedService
]
};
}
}
Componente Lista de pacientes
import { Component, Input, OnInit, ViewChild } from '@angular/core';
import { CommunicatePatientListService } from '%sharedServices%/communicate_patients_list.service';
import { HTTPPatientsListService } from 'httpPatientsListService';
import { SharedService } from 'sharedService';
import { SchedulerSharedService } from 'schedulerSharedService';
import { FormChangeService } from 'formChangeService';
import { Config } from 'appConfig';
/* ------- !Config ---------*/
const MODULE_NAME: string = 'patients_list';
const MODULE_PATH: string = `${Config.getProdFolderName()}/modules/patients/${MODULE_NAME}`;
@Component({
templateUrl: `${MODULE_PATH}/${MODULE_NAME}.component.html`,
styleUrls: [`${MODULE_PATH}/${MODULE_NAME}.component.css`,]
})
export class PatientsListComponent implements OnInit {
constructor(
private patientsListService:HTTPPatientsListService,
private patsListServCom:CommunicatePatientListService,
private schedulerSharedService:SchedulerSharedService,
private sharedService:SharedService
) {
}