2017-10-20 1 views
0

이 코드는 컴파일 시간에 맞춰 개발 모드에서 실패합니다.AOT가 포함 된 각도 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 코너 AOT와 useValue 제공자로 사용될 때 창이 undefined] https://stackoverflow.com/questions/43445947/window-is-undefined-when-used-as-usevalue- 제공 업체 - 각도 4-aot) – estus

답변

1

useFactory을 AOT 용으로 주입하고자하는 경우 사용해야합니다. 변경 사항은 굵은 기울임 체로 표시하십시오. 나는 "Console"이라는 이름의 주입 공장을 추가했다.

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] 
     } 
     ] 
    }; 
    } 
}