Я использую Angular 8 и столкнулся с некоторыми проблемами с маршрутизацией, когда использую ленивые дочерние модули.
app-routing.module.ts
...
const routes: Routes = [
{
path: :id,
component: ParentComponent,
children: [
{ path: 'child', loadChildren: './child.module#ChildModule' }
]
}
]
...
child-routing.module.ts
...
const routes: Routes = [
{ path: 'child1', component: Child1Component },
{ path: 'child2', component: Child2Component }
]
...
Теперь у нас есть маршрутизация этими способами. foo.com/123/child/child1 -> Child1Component foo.com/123/child/child2 -> Child2Component
Здесь я попытался перейти на страницу foo.com/123/child/child2 внутри Child1Component. Я думал, что дочерний модуль отделен от модуля приложения, и он загружен лениво, поэтому этот код будет работать правильно.
child2.component.ts
...
constructor(private router: Router) {}
...
this.router.navigate(['child/child2']);
...
Но однаждыЯ запустил приложение, оно перешло на foo.com/child/child2. Я ожидал, что foo.com/123/child/child2.
Если я внесу эти изменения, он будет работать, как и ожидалось.
child2.component.ts
...
private parentId;
constructor(private router: Router, private route: ActivatedRoute) {
this.route.parent.parent.params.subscribe((params) => {this.parentId = params.id});
}
...
this.router.navigate([this.parentId, 'child', 'child2']);
...
Он получает parentId из URL-адреса внутри компонента и перемещается по нему. Но мне не нравится этот подход, потому что он не масштабируется. Если я изменю имя параметра Route Param или добавлю еще несколько параметров маршрутизации, мне придется также обновить дочерние компоненты для маршрутизации.
Есть ли лучший подход для обработки маршрутизации в дочерних компонентах, определенных для дочерних модулей с отложенной загрузкой?