Angular 8 гибридное приложение не распознает AngularJS компонентов - PullRequest
0 голосов
/ 09 апреля 2020

Я начал разработку гибридного приложения. Итак, я сделал следующие шаги:

  • добавить Angular 8 зависимостей
  • добавить polyfills.ts
  • удалить атрибут ng-app из моего root индекса . html
  • сделать руководство bootstrap из AngularJs app

Как выглядит мой Angular модуль инициализации:

@NgModule({
    imports: [
        BrowserModule,
        UpgradeModule
    ]
})
export class HubAngularModule {
    ngDoBootstrap() {
    }
}

platformBrowserDynamic().bootstrapModule(HubAngularModule)
    .then(platformRef => {
        console.log("Bootstrapping in Hybrid mode with Angular & AngularJS");
        const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule;

        upgrade.bootstrap(document.body, ['myAngularJsModule']);
    });

Как выглядит мой индекс. html:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <script src="dist/index.bundle.js"></script> <!--Webpack bundle-->
  <link rel="stylesheet" href="dist/styles.css"/>
</head>
<body>
<div layout="column" layout-align="" ng-cloak>
    <main-header></main-header> <!--AngularJS header component-->
    <console-menu></console-menu> <!--AngularJS menu component-->
    <md-content ui-view="main"></md-content> <!--AngularJS root ui-view-->
</div>
</body>
</html>

Главный заголовок, консольное меню - это AngularJS компонентов. Конечно, эта конфигурация работает хорошо, когда отображается ng-app.

Что я ожидаю. Гибридное приложение запускается так же, как старое приложение AngularJS, и я могу видеть страницу входа, стартовую страницу и т. Д. c.

Что я на самом деле получил. AngularJS приложение фактически загружается. Я вижу, как выполняется метод app.module (). Run (...). Но ни один компонент не загружается, поэтому я вижу только пустую страницу.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

После нескольких часов экспериментов я нашел душевный покой. Я решил проверить, будет ли работать руководство bootstrap AngularJS:

angular.element(document)
    .ready(() => {
        angular.bootstrap(document.body, ['myAngularJsModule']);
    });

И оно не удалось. Даже если нет Angular 8 настоящего. Поэтому причина, по которой он не запускается, заключается в расположении тегов <script> с моими пакетами веб-пакетов. Он расположен в <head>, но должен быть расположен в <body> после всей разметки приложения.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">

</head>
<body>
<div layout="column" layout-align="" ng-cloak>
    <main-header></main-header> <!--AngularJS header component-->
    <console-menu></console-menu> <!--AngularJS menu component-->
    <md-content ui-view="main"></md-content> <!--AngularJS root ui-view-->
</div>
<script src="dist/index.bundle.js"></script> <!--Webpack bundle-->
<link rel="stylesheet" href="dist/styles.css"/>
</body>
</html>

Это так глупо, но именно эта глупость иногда вызывает самую большую головную боль. И что меня разочаровало больше всего, ни один учебник по миграции ничего не говорит об этой детали!

0 голосов
/ 09 апреля 2020

Обновили ли вы свои angularJS компоненты, чтобы они работали в Angular?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...