2017-08-07 67 views
3

我使用window.location来设置注射。 在我的模块附近进口我定义变量useFactory vs useValue与AoT编译

const flag = window.location.search.includes('flag'); 
... 
{ provide: FLAG, useValue: flag }, 

,它按预期工作与JIT编译 但是当我切换到AOT它打破了在这两种情况下

export function flagFactory() { 
    return window.location.search.includes('flag');; 
} 
... 
{ provide: FLAG, useFactory: flagFactory }, 

为什么我得到 useFactory作品undefineduseValuetrueuseFactory

+0

你在哪里定义代码的这部分'const flag = ...'? – PierreDuc

+0

在RootModule中加上进口 – mgrinko

回答

1

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

这是AOT(许多)的陷阱之一。总是试图让每个符号都能被静态分析

+0

理解谢谢 – mgrinko