В приложении Angular 5 есть два отдельных модуля, называемых ядром и администратором.
Основная маршрутизация настраивается как:
const routes: Routes = [
{
path: '',
redirectTo: 'login',
pathMatch: 'full'
},
{
path: 'admin',
loadChildren: './../admin/admin.module#AdminModule',
data: {
expectedRole: Constants.ADMIN_ROLE_ID
}
},
];
Теперь, в модуле admin, маршрутизация такова:
const routes: Routes = [
{
path: 'activity',
children: [
{ path: '', component: ActivityComponent },
{ path: 'detail/:id', component: ActivityDetailComponent }
]
},
{
path: 'user',
children: [
{ path: '', component: UserComponent },
{ path: 'detail/:id', component: UserDetailComponent },
]
}
];
Задача
Если страница приложения находится в "http:localhost/admin/activity"
, мне нужно добавить routerLink в элемент HTML, чтобы приложение переходило на "http:localhost/admin/user/detail/1"
.
Что я пробовал
[routerLink]="['user/detail', id]
но это приложение занимает "http://localhost/admin/activity/user/detail/1"
.
Ожидаемый результат
"http:localhost/admin/user/detail/1"
.
пожалуйста, обратите внимание
Ключевое слово admin
в маршруте является динамическим, и я не хочу его жестко кодировать в routerLink
.
Эту проблему можно решить, изменив файл admin-routing.module.ts как:
const routes: Routes = [
{
path: '',
component: AdminComponent
children: [
{
path: 'activity',
component: ActivityComponent,
children: [
{
path: 'view',
component: ActivityViewComponent
},
{
path: 'detail/:id',
component: ActivityDetailComponent
}
]
},
{
path: 'user',
component: UserComponent,
children: [
{
path: 'view',
component: UserViewComponent
},
{
path: 'detail/:id',
component: UserDetailComponent
}
]
}
]
}
];
Вы можете увидеть два новых компонента: UserViewComponent и ActivityViewComponent, которые просто используются для просмотра вашего текущего UserComponent и ActivityComponent соответственно.
Замените содержимое user.component.html (поместите его в user-view.component.html) и activity.component.html (поместите его в activity-view.component.html) с помощью <router-outlet></router-outlet>
что очень важно в этой задаче.
Теперь вы можете получить доступ к этим компонентам как
Вы можете найти более подробную информацию здесь
Он попробовал это
const routes: Routes = [
{
path: 'activity',
children: [
{ path: '', component: ActivityComponent },
{ path: 'detail/:id', component: ActivityDetailComponent }
]
},
{
path: 'user',
children: [
{ path: '', component: UserComponent },
{ path: 'detail/:id', component: UserDetailComponent },
]
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
RouterModule.forChild (маршруты) используют для обработки других модулей маршрута