所以我来到了一个相当大的项目,这个项目的开发理念是,随着 Angular 升级到完整的 2.0 版本,它应该启用 AoT 编译,最后我从 Angular 获取所有 API 并准备好去做,或者看起来是这样。 ..
首先,项目在带有 Angular 2 和 Typescript 2.0.2 的 JiT 模式下运行得非常好,但在 AoT 中却不是这样。
经过大量研究后,我发现问题在于我的声明/提供者/入口组件列表是动态聚合的 - 这就是当应用程序拆分为许多子模块时发生的情况,每个子模块都可以向这些列表中添加一些内容,如这个需要。当我尝试做类似的事情时:
@NgModule({
declarations:[ configuration.declarations ]
})
我收到Error encountered resolving symbol values statically.
如果我在 JiT 模式下输出聚合值并在此处手动插入所有这些条目的静态列表configuration.declarations
,它会突然开始工作。
所以最大的问题是 - 什么鬼?!为什么它不起作用以及如何克服这个问题?
就像手动制作具有单个文件中列出的所有子组件需求的大型应用程序一样,会大大破坏良好的代码设计,我最好不要相信已经证明非常擅长制作合理的编码布局的 Angular 团队会暗示这是唯一的选择。