0

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 },

为什么我得到undefinedwithuseValuetruewith useFactory

4

1 回答 1

1

我的猜测是AoT静态分析NgModule结构之外的代码。所以它会window.location.search.includes提前看到并执行它。但是在编译时,这显然会返回undefined. 在使用 a 的情况下factory,它不会尝试提前执行主体,仅在运行时执行。

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

于 2017-08-07T06:49:30.403 回答