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 编译器抱怨未导出的函数引用。此外,导出该函数可以实现成功的构建、愉快的注入器和成功的运行时启动。
我有一个示例 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 编译器抱怨未导出的函数引用。此外,导出该函数可以实现成功的构建、愉快的注入器和成功的运行时启动。