2017-10-20 57 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提供商使用時窗口是未定義] 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] 
     } 
     ] 
    }; 
    } 
}