#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