Ответ 1
Я понимаю, у вас есть два разных вопроса:
1- Как предотвратить разрушение компонента, когда вы его покидаете. 2- реализация дочерних маршрутов.
1) На данный момент Angular не имеет удобного способа сделать это. Мы бы оценили его, если они были крючком жизненного цикла, называемым canDestroy().
В любом случае вы можете сделать это либо с помощью немаршрутизированных вкладок, либо просто сохранить свои данные на более высоком компоненте, который не будет уничтожен.
2) Для детских маршрутов я просто поставлю 2 примера:
Ex1: регулярная маршрутизация ребенка
const AdminRoutes: Routes = [
{
path: '',
component: AdminComponent,
children: [
{
path: 'users',
component: UsersComponent,
children: [
{ path: 'acces', component: AccesComponent, data: { preload: true} },
{ path: 'roles', component: RolesComponent, data: { preload: true} },
{ path: '', redirectTo: '/admin/users/acces', pathMatch: 'full' },
{ path: '**', redirectTo: '/admin/users/acces', pathMatch: 'full' },
],
data: { preload: true}
},
{ path: '', redirectTo: '/login', pathMatch: 'full' },
{ path: '**', redirectTo: '/login', pathMatch: 'full' }
]
},
EX2: Когда дочерние маршруты принадлежат другому модулю
Код для более высокого модуля
`
const appRoutes: Routes = [
{ path: 'login', component: LoginComponent, data: { preload: true} },
{
path: 'admin',
loadChildren: 'app/modules/admin/admin.module#AdminModule',
canActivate: [AuthGuardService],
data: { preload: true}
},
{ path: '', redirectTo: '/login', pathMatch: 'full' },
{ path: '**', redirectTo: '/login', pathMatch: 'full' }
`
Код для дочерних маршрутов в своем собственном модуле
`
const AdminRoutes: Routes = [
{
path: '',
component: AdminComponent,
children: [
{
path: 'users',
component: UsersComponent,
children: [
{ path: 'acces', component: AccesComponent, data: { preload: true} },
{ path: 'roles', component: RolesComponent, data: { preload: true} },
{ path: '', redirectTo: '/admin/users/acces', pathMatch: 'full' },
{ path: '**', redirectTo: '/admin/users/acces', pathMatch: 'full' },
],
data: { preload: true}
},
{ path: '', redirectTo: '/login', pathMatch: 'full' },
{ path: '**', redirectTo: '/login', pathMatch: 'full' }
]
},
`