2017-10-20 11 views
0

このコードは、Ahead of time compilationで開発モードで失敗します。AOT付きAngular 4インジェクションコンソール

export function loggerFactory(console, http, device, injector) { 
    return environment.production ? 
     new LogstashLoggerService(device, injector, http) : 
     new ConsoleLoggerService(console); 
}; 

let consoleObj = window.console; 

@NgModule({ 
    imports: [], 
    exports: [], 
    declarations: [], 
    providers: [], 
}) 
export class LoggerModule { 
    static forRoot(): ModuleWithProviders { 
    return { 
     ngModule: LoggerModule, 
     providers: [ 
     {provide: CONSOLE, useValue: consoleObj}, 
     { 
      provide: Logger, 
      useFactory: loggerFactory, 
      deps: [CONSOLE, HttpInterceptor, DeviceService, Injector] 
     } 
     ] 
    }; 
    } 
} 

コンソールを挿入するにはどうすればよいですか?

+0

(の可能性のある重複[アンギュラ4 IBMアカデミーとuseValueプロバイダとして使用される場合、ウィンドウが定義されていません] https://stackoverflow.com/questions/43445947/window-is-undefined-when-used-as-usevalue-プロバイダー付き4角形) – estus

答えて

1

useFactoryは、AOT用に注入するものでなければなりません。太字イタリックの変更を参照してください。私は、 "コンソール"という名前の注入工場を追加しました。

import { Inject } from '@angular/core'; 

export function loggerFactory(@Inject('Console') console, http, device, injector) { 
    return environment.production ? 
     new LogstashLoggerService(device, injector, http) : 
     new ConsoleLoggerService(console); 
}; 

 export function consoleFactory(): any { return console; }  

@NgModule({ 
    imports: [], 
    exports: [], 
    declarations: [], 
    providers: [], 
}) 
export class LoggerModule { 
    static forRoot(): ModuleWithProviders { 
    return { 
     ngModule: LoggerModule, 
     providers: [ 
     { provide: 'Console', useFactory: consoleFactory }, 
     { 
      provide: Logger, 
      useFactory: loggerFactory, 
      deps: [CONSOLE, HttpInterceptor, DeviceService, Injector] 
     } 
     ] 
    }; 
    } 
}