我用window.location
来设置注射。 在我的模块中,我定义变量
const flag = window.location.search.includes('flag');
...
{ provide: FLAG, useValue: flag },
它与 JIT 编译按预期工作 但是当我切换到 AoT 时,它会中断useFactory
在这两种情况下都有效
export function flagFactory() {
return window.location.search.includes('flag');;
}
...
{ provide: FLAG, useFactory: flagFactory },
为什么我undefined
useValue
,true
useFactory
?
我的猜测是AoT
静态分析NgModule
结构之外的代码。因此,它看到了window.location.search.includes
并提前执行了此操作。但是在编译时,这显然会返回undefined
.在使用factory
的情况下,它不会尝试提前执行主体,只会在运行时执行。
这是AOT的(许多(陷阱之一。始终尝试让每个符号静态可分析