Angular 2 AOT и ленивая загрузка подмодулей

До того, как я обновился до angular-cli.beta-24, у меня была такая структура маршрута:

+route1
 - +subroute1
 - +subroute2
 - +subroute3

Но это не удается, если подмаршруты определены в router.module из +route1, потому что их нельзя найти теперь, когда AOT включен по умолчанию.

Я могу заставить его работать, не определяя там подмаршруты, а вместо этого перемещая их в тот же router.module, что и все остальные маршруты в приложении. Вместо этого выглядит так:

+route1
+subroute1
+subroute2
+subroute3

Очевидно, что маршруты больше не являются подмаршрутами.

Хотя это работает, для меня это не является жизнеспособным решением, поскольку мои хлебные крошки зависят от дерева маршрутизаторов, и это просто создает беспорядок, если у вас больше нет дерева маршрутизаторов.

Вот пример (файл router.module route1):

const routes: Routes = [
  {
    path: '',
    component: Route1Component
  },
  {
    path: 'subroute1',
    loadChildren: '+subroute1/subroute1.module#Subroute1Module'
  },
  {
    path: 'subroute2',
    loadChildren: '+subroute2/subroute2.module#Subroute2Module'
  },
  {
    path: 'subroute3',
    loadChildren: '+subroute3/subroute3.module#Subroute3Module'
  }
];

Почему вы не можете определить такие маршруты при использовании AOT? Что мне не хватает?


person Chrillewoodz    schedule 02.01.2017    source источник


Ответы (1)


AOT и отложенная загрузка хорошо работают вместе, начиная с BETA.21 (об этом я написал сообщение).

Вместо того, чтобы переходить к loadChildren относительному пути от ., вы должны начать с папки app следующим образом:

const routes: Routes = [
  {
    path: '',
    component: Route1Component
  },
  {
    path: 'subroute1',
    loadChildren: 'app/+route1/+subroute1/subroute1.module#Subroute1Module'
  },
  {
    path: 'subroute2',
    loadChildren: 'app/+route1/+subroute2/subroute2.module#Subroute2Module'
  },
  {
    path: 'subroute3',
    loadChildren: 'app/+route1/+subroute3/subroute3.module#Subroute3Module'
  }
];

РЕДАКТИРОВАТЬ 1: Это может исходить от вашей бочки.

Были некоторые проблемы с бета-версией 23, и они перешли на бета-версию 24. НО критическое изменение было введено в бета-версии 23, и если вы читали только список изменений для бета-версии 24, вы могли его пропустить. Ознакомьтесь с бета-версией. 23 журнала изменений, критические изменения:

blueprints: корневой модуль и компонент приложения теперь необходимо импортировать напрямую. (например, используйте импорт { AppModule } из './app/app.module'; вместо импорта { AppModule } из './app/';)

Если я правильно понял, бочки не работают с AOT (который сейчас включен по умолчанию). По сути, вы можете удалить index.ts и импортировать то, что вам нужно напрямую.

person maxime1992    schedule 02.01.2017
comment
Уже попробовал это без везения. Дело в том, что некоторые из дочерних маршрутов работают, но никогда, когда ленивая загрузка имеет глубину 3 уровня. Потому что, начиная с моего AppModule, у меня есть еще один уровень с AdminAreaModule, у которого есть DashboardModule, но дальше этого он не работает.. Несмотря на точно такие же определения. - person Chrillewoodz; 02.01.2017
comment
Может быть, проблемы возникают из-за моего импорта стволов? - person Chrillewoodz; 02.01.2017
comment
Я не понимаю импорт стволов. Что ты имеешь в виду ? - person maxime1992; 02.01.2017
comment
Бочка — это избыточный, бессмысленный термин, который кто-то придумал в мире Angular для описания соглашения о файле index, который экспортирует содержимое содержащего его каталога. В таком термине не было необходимости, и, надеюсь, люди перестанут его использовать. - person Aluan Haddad; 02.01.2017
comment
О, понятно, спасибо @AluanHaddad! Я отредактировал свой пост, потому что он действительно может исходить из бочки! - person maxime1992; 03.01.2017
comment
В настоящее время меняю тысячи импортов, лол, я вернусь к вам, когда мои пальцы перестанут кровоточить. - person Chrillewoodz; 03.01.2017
comment
Да, эти изменения могут быть довольно раздражающими и могут потребовать тонны работы, но ведь это игра с бета-версией, верно? :) Удачи с этим, я надеюсь, что проблема исходит оттуда ... ! - person maxime1992; 03.01.2017
comment
Нет, это все еще проблема, и это серьезный недостаток дизайна. Даже не заставляйте меня начинать с непрозрачной функции маркера или интерфейса типа. Если эти вещи звучат странно, это потому, что так оно и есть. Разработанный фреймворк в корне расходится как с инструментами, так и с платформой, на которую он нацелен. Они пытаются скомпилировать декораторы и материализовать типы. - person Aluan Haddad; 03.01.2017
comment
Оказывается, это ошибка в последней версии angular cli, я добавил временное решение, чтобы оно заработало. Был добавлен запрос на включение, чтобы исправить это, и, надеюсь, он будет выпущен на следующей неделе. - person Chrillewoodz; 04.01.2017
comment
Можно ссылку на проблему? Просто любопытно :) - person maxime1992; 04.01.2017