带有AOT的角度4注入控制台
问题描述:
此代码在开发模式下未及时编译失败。带有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]
}
]
};
}
}
我该如何注入控制台?
答
你必须使用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]
}
]
};
}
}
(的可能的复制[按与角4 AOT useValue提供商使用时窗口是未定义] https://*.com/questions/43445947/window-is-undefined-when-used-as-usevalue-提供商与 - 角-4- AOT) – estus