Угловой 5 routerLink между родительским компонентом и другим родительско-дочерним компонентом

1

В приложении 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.

Теги:
angular
routing

2 ответа

1
Лучший ответ

Эту проблему можно решить, изменив файл 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> что очень важно в этой задаче.

Теперь вы можете получить доступ к этим компонентам как

  • /Администратор/деятельность/просмотр
  • /Администратор/деятельность/подробно/: идентификатор
  • /Администратор/пользователь/просмотр
  • /Администратор/пользователь/подробно/: идентификатор

Вы можете найти более подробную информацию здесь

  • 0
    Я понимаю, что это один из способов сделать это, но мне больше интересно делать это при сохранении маршрутов для детей. Я думаю, что routerLink способен обрабатывать регулярные выражения, чтобы, вероятно, решить эту проблему.
  • 0
    Я понимаю ваше требование. Давайте работать над этим
Показать ещё 4 комментария
0

Он попробовал это

   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 (маршруты) используют для обработки других модулей маршрута

  • 0
    У меня уже есть это в файле маршрутизации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню