uirouter/angular-hybrid AoT 构建 bootstrapModuleFactory promise 注入器无法获取 UIRouter

uirouter/angular-hybrid AoT build bootstrapModuleFactory promise injector fails to get UIRouter

我有一个示例 uirouter/angular-hybrid 应用程序,使用 @ngtools/webpack AngularCompiler 插件和 运行ning 成功构建。我已经更新了 main.aot.ts 引导函数以使用 bootstrapModuleFactory 并且可以从承诺成功处理程序中可用的 platformRef 获取注入器。但是 injector.get(UIRouter) 失败 "Cannot read property 'config' of null."

platformBrowser().bootstrapModuleFactory(AppModuleNgFactory).then((platformRef) => {
  const urlService: UrlService = platformRef.injector.get(UIRouter).urlService;
  function startUIRouter() {
    urlService.listen();
    urlService.sync();
  }

  platformRef.injector.get<NgZone>(NgZone).run(startUIRouter);   
});

我确认 injector.get(NgZone) 会成功,而 injector.get(UIRouter) 会失败。我尝试将调用移动到 NgZone 运行 函数内的 injector.get(UIRouter) 但没有成功。

我还尝试将 upgrade.bootstrap 调用移动到上面的 promise success 函数中以确保它首先启动,但没有解决问题。

一个简单的 angularjs 组件呈现良好,因此启动过程似乎成功,除了无法调用 UIRouter.urlService 上的 listen() 和 sync() 函数.

我还确认了开发配置和非 AOT 生产配置,对于同一个示例应用程序,没有这个问题并且似乎工作正常。

使用版本:

uirouter/angular-hybrid v6.0.2

angular 包在 v7.1.4,但在 6.0.0 中也失败了(这是 package.json 文档中 uirouter/angular-hybrid v6 的 angular 版本.0.2)

感谢任何想法。

问题是我传递给 UIRouterUpgradeModule.forRoot 的配置对象是从一个使用该对象默认导出的文件中导入的,并且该对象引用了一个配置函数,该函数不是正在出口。这种组合在构建期间隐藏了问题,并导致在运行时出现注入器无法使用 UIRouter 对象的症状。

用命名导出替换默认导出会触发 AOT 编译器抱怨未导出的函数引用。此外,导出该函数可以实现成功的构建、愉快的注入器和成功的运行时启动。