UIRouter/ угловой гибрид AoT build bootstrapModuleFactory Обещатель инжектора не может получить UIRouter
У меня есть пример гибридного и углового гибридного приложения, успешно созданного с помощью подключаемого модуля @ngtools/webpack AngularCompiler. Я обновил загрузочную функцию main.aot.ts для использования bootstrapModuleFactory и могу получить инжектор из platformRef, доступный в обработчике успеха обещания. Но injector.get(UIRouter) завершается с ошибкой "Не удается прочитать свойство 'config' из 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) завершится ошибкой. Я попытался переместить вызов в injector.get(UIRouter) внутри функции запуска NgZone, но безуспешно.
Я также попытался переместить вызов upgrade.bootstrap в функцию обещания успеха, описанную выше, чтобы убедиться, что он сначала загрузился, не решая проблему.
Простой компонент angularjs хорошо рендерится, поэтому процесс загрузки, похоже, завершается успешно, за исключением невозможности вызова функций listen() и sync() в UIRouter.urlService.
Я также подтвердил, что конфигурация разработки и производственная конфигурация не для этого же примера приложения не имеют этой проблемы и, похоже, работают нормально.
Использование версий:
uirouter / угловой гибрид v6.0.2
угловые пакеты в v7.1.4, но также не удалось с 6.0.0 (это угловая версия в package.json в документации для uirouter/angular-hybrid v6.0.2)
Спасибо за любые идеи.
2 ответа
Проблема заключалась в том, что объект конфигурации, который я передавал в UIRouterUpgradeModule.forRoot, импортировался из файла, который использовал экспорт объекта по умолчанию, и объект имел ссылку на функцию конфигурации, которая не экспортировалась. Эта комбинация скрыла проблему во время сборки и привела к появлению во время выполнения симптома отсутствия объекта UIRouter, доступного для инжектора.
Замена экспорта по умолчанию на именованный экспорт привела к тому, что компилятор AOT пожаловался на неэкспортированную ссылку на функцию. Кроме того, экспорт функции позволил успешную сборку, счастливый инжектор и успешную загрузку во время выполнения.
Вы сталкиваетесь с какими-либо проблемами при маршрутизации на маршруты с компонентами ng2, или он работает нормально для вас?