2017-10-20 58 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] 
     } 
     ] 
    }; 
    } 
}