Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 使用AoT编译的useFactory与useValue_Angular_Angular Di - Fatal编程技术网

Angular 使用AoT编译的useFactory与useValue

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

我使用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 },
为什么useValue没有定义,useFactory为true?

我的猜测是AoT在NgModule结构之外静态地分析代码。因此它会看到window.location.search.includes并提前执行。但在编译时,这显然将返回未定义。在使用工厂的情况下,它不会尝试提前执行主体,只会在运行时执行


这是AOT的众多陷阱之一。始终尝试使每个符号都可以静态分析

在RootModule和导入中,您在哪里定义代码const flag=…?的这一部分