Угловая маршрутизация, должен ли дочерний модуль быть импортирован перед родительским?

#angular #import #routing

#угловой #импорт #маршруты

Вопрос:

В настоящее время я обновляю свои знания angular с версии 1.x до 2 , и у меня возникли некоторые проблемы с пониманием частей RouterModule.

У меня есть корневой модуль маршрутизации, определенный и импортированный в мой корневой модуль. Тогда у меня есть два дочерних модуля, каждый со своим собственным модулем маршрутизации, которые добавляются с помощью forChild вместо forRoot. Эти дочерние модули маршрутизации добавляются в соответствующие модули, которые, в свою очередь, добавляются в корневой модуль. Это, как я понимаю, по-прежнему правильно (и это работает).

Что меня смущает, так это то, что, похоже, существуют некоторые требования к порядку, в котором импортируются корневой модуль маршрутизации и дочерние модули.

Смотрите фрагмент ниже импорта в корневом модуле.

 imports: [
    BrowserModule,
    SharedMaterialModule,
    BrowserAnimationsModule,
    Child1Module
    Child2Module,
    AppRoutingModule
  ],
  

Это работает. Однако, если я переключусь на это:

 imports: [
    BrowserModule,
    SharedMaterialModule,
    BrowserAnimationsModule,
    Child2Module,
    AppRoutingModule
    Child1Module
  ],
  

Я больше не могу использовать routerLink из Child2Module в Child1Module. Он всегда перенаправляет на пути по умолчанию, определенные в корневом модуле маршрутизации.

Я немного поискал и не могу найти четкого ответа на вопрос, что вызывает такое поведение (хотя я подозреваю, что это может быть связано с лениво загруженными модулями ?!).

Помощь приветствуется.

Ответ №1:

Angular использует стратегию под названием «выигрывает первое совпадение» при попытке выбрать правильный маршрут на основе пути. В корневой маршрутизации вашего приложения вы определяете маршрут с подстановочным знаком. Если вы поместите AppRoutingModule перед Child1Module и попытаетесь перенаправить с Child2Module на Child1Module, то первый согласованный маршрут будет шаблоном из AppRoutingModule. Здесь у вас есть более подробная информация об этом:https://angular.io/guide/router#define-a-wildcard-route