import { NgModule, APP_INITIALIZER, ModuleWithProviders, Optional, SkipSelf } from '@angular/core'; import { NaStartupService, IStartupConfigResource, NA_STARTUP_CONFIG } from './na-startup.service'; import { throwIfAlreadyLoaded } from '../already-loaded'; import { NaTranslateModule } from '../translate/na-translate.module'; @NgModule({ imports: [ NaTranslateModule ] }) export class NaStartupModule { constructor(@Optional() @SkipSelf() parentModule: NaStartupModule) { throwIfAlreadyLoaded(parentModule, 'NaStartupModule'); } static forRoot(startupConfig: IStartupConfigResource): ModuleWithProviders { return { ngModule: NaStartupModule, providers: [ { provide: NA_STARTUP_CONFIG, useValue: startupConfig }, NaStartupService, { provide: APP_INITIALIZER, useFactory: NaStartupServiceFactory, deps: [NaStartupService, NA_STARTUP_CONFIG], multi: true, } ] }; } } export function NaStartupServiceFactory(startupService: NaStartupService, startupConfig: IStartupConfigResource): Function { const initializer = () => { return startupService.load(startupConfig); }; return initializer; }