Angular 使用AoT编译的useFactory与useValue
我使用window.location设置可注射的。 在导入附近的模块中,我定义了变量Angular 使用AoT编译的useFactory与useValue,angular,angular-di,Angular,Angular Di,我使用window.location设置可注射的。 在导入附近的模块中,我定义了变量 const flag = window.location.search.includes('flag'); ... { provide: FLAG, useValue: flag }, 而且它在JIT编译中也能正常工作 但当我切换到AoT时,它会中断 useFactory在这两种情况下都有效 export function flagFactory() { return window.location.se
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 },
为什么useValue没有定义,useFactory为true?我的猜测是AoT在NgModule结构之外静态地分析代码。因此它会看到window.location.search.includes并提前执行。但在编译时,这显然将返回未定义。在使用工厂的情况下,它不会尝试提前执行主体,只会在运行时执行
这是AOT的众多陷阱之一。始终尝试使每个符号都可以静态分析在RootModule和导入中,您在哪里定义代码const flag=…?的这一部分