Я работаю над проектом, написанным на Angular (v8.2.8), и использую роутер с той же версией. Архитектура маршрутизации следующая:
У меня есть app-routing.module.ts, где у меня есть 3 записи для массива routes
: Shell.childRoutes([...array of routes]),
Case.childRoutes([...array of routes]),
{ path: '**', redirectTo: '/', pathMatch: 'full' }
Shell - это родительский компонентдля внутренних страниц приложения. Случай - это родительский компонент для общедоступных страниц приложения.
Дочерние маршруты метода выполняются практически одинаково для обоих компонентов:
export class Shell {
static childRoutes(routes: Routes): Route {
return {
path: 'app',
component: ShellComponent,
children: routes,
canActivate: [AuthenticationGuard],
data: { reuse: true }
};
}
}
и
export class Case {
static childRoutes(routes: Routes): Route {
return {
path: '',
component: CaseComponent,
children: routes,
data: { reuse: true }
};
}
}
Приложение имеет dashboard
компонент для Shell
родителя и home
компонент для Case
родителя. Пользователь загружает страницу в home
маршрут и разметка выглядит следующим образом:
<app-root>
<app-case>
<router-outlet></router-outlet>
<app-home></app-home>
</app-case>
</app-root>
И после перенаправления на маршрут dashboard
я ожидаю следующую разметку:
<app-root>
<app-shell>
<router-outlet></router-outlet>
<app-dashboard></app-dashboard>
</app-shell>
</app-root>
Но я получаю
<app-root>
<app-case>
<router-outlet></router-outlet>
<app-dashboard></app-dashboard>
</app-case>
</app-root>
Так что точная проблема в тестовом примере: пользователь находится на маршруте, который существует в Shell
parent. Затем, если пользователь будет перенаправлен на любой маршрут в Case
parent - родитель останется в Shell. И та же ситуация работает в другом направлении. Если маршрут Case
был загружен первым, после перенаправления на Shell
родительский маршрут останется без изменений.
Я пытался редактировать различные параметры в методе childRoutes
, но безуспешно, просто не получаюЯ понимаю, это проблема в двигателе, или мне просто нужно указать некоторые дополнительные параметры.