Проблема маршрутизации во вложенном дочернем элементе

У меня есть два компонента в одном компоненте. При нажатии кнопки я вызываю функцию openClientCallLogs, но маршрутизация не работает, URL-адрес будет создан, но они не перешли к другому компоненту.

по нажатию кнопки

openClientCallLogs(client: Client): void {
    this.router.navigate(['/index/client/clients-detail', client.id ,'call-logs']);
  }

Маршрутизация модуля

export const clientsRoutes: Routes = [
  {
    path: 'client',
    children: [
      {
        path: 'clients-detail',
        component: ClientDetailsComponent,
        children: [
          { 
            path: ':id/call-logs',
            component: ClientCallLogsComponent
          }
        ]
      }
    ],
  },
];

Это следует за моим модулем App.routing

const routes: Routes = [
  {
    path: '',
    component: FullComponent,
    canActivate: [AuthGuard],
    children: [
      {
        path: '',
        redirectTo: '/dashboard',
        pathMatch: 'full',
      },
      {
        path: 'dashboard',
        loadChildren: () =>
          import('./pages/pages.module').then((m) => m.PagesModule),
      },
      {
        path: 'index',
        loadChildren: () =>
          import('./pages/clients/clients.module').then((m) => m.ClientsModule),
      },

пожалуйста, поделитесь стекблицем с минимальным кодом и воспроизведенной проблемой

Naren Murali 24.06.2024 09:31

Компонент проекта имеет множество зависимостей

gourav kumar 24.06.2024 10:22

просто нужны маршруты с пустыми компонентами, где и возникает проблема

Naren Murali 24.06.2024 10:23

есть ли в вашем ClientDetailsComponent розетка для роутера?

Sam Scholefield 24.06.2024 10:59

@SamScholefield нет, если я добавлю розетку маршрутизатора подробно, они не перейдут на другую страницу, они отобразят эту страницу на существующей

gourav kumar 24.06.2024 12:03
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
5
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, проблема у вас в том, что вы не хотите иметь ClientDetailsComponent в качестве родителя, а хотите использовать только ClientCallLogsComponent. Для этого вы можете изменить маршруты клиентов следующим образом.

  export const clientsRoutes: Routes = [
    {
      path: 'client',
      children: [
        {
          path: 'clients-detail',
          children: [
            {
              path:'',
              component: ClientDetailsComponent,
            },
            { 
              path: ':id/call-logs',
              component: ClientCallLogsComponent
            }
          ]
        }
      ],
    },
  ];

я добавляю, но ничего не происходит

gourav kumar 24.06.2024 12:05

Когда вы просматриваете свою страницу, какой компонент сейчас находится в DOM или в DOM сейчас нет компонента?

Alex 24.06.2024 12:07

Компонент ClientDetailsComponent

gourav kumar 24.06.2024 12:42

Итак, если вы перейдете на новую страницу и увидите правильный путь, но в DOM все еще есть старый компонент ClientDetailsComponent, обычно это всего лишь одна из этих двух проблем. 1. У вашего компонента ClientCallLogsComponent есть некоторые проблемы. Вы можете проверить журналы консоли, а также попытаться очистить компонент и протестировать его еще раз. 2. В вашем маршруте над ClientDetailsComponent все еще есть ClientCallLogsComponent. Пожалуйста, проверьте еще раз, чтобы убедиться, что ClientDetailsComponent встречается в вашем файле маршрутизации только один раз.

Alex 24.06.2024 13:02
Ответ принят как подходящий

Вам нужно создать компонент, который будет контейнером для рендеринга ClientDetailsComponent или ClientCallLogsComponent, это решит вашу проблему.

Допустим, компонент называется ClientDetailComponent.

@Component({
  selector: 'app-client',
  imports: [RouterOutlet],
  standalone: true,
  template: `<router-outlet/>
  `,
})
export class ClientDetailComponent {
}

Затем добавьте этот компонент-оболочку в маршрутизацию следующим образом.

  export const clientsRoutes: Routes = [
    {
      path: 'client',
      children: [
        {
          path: 'clients-detail', 
          component: ClientDetailComponent,
          children: [
            {
              path:'',
              component: ClientDetailsComponent,
            },
            { 
              path: ':id/call-logs',
              component: ClientCallLogsComponent
            }
          ]
        }
      ],
    },
  ];

разве это невозможно, если они дети клиентов-подробнее

gourav kumar 24.06.2024 12:44

@gouravkumar обновил то же самое!

Naren Murali 24.06.2024 12:47

даа сейчас работаю

gourav kumar 24.06.2024 13:58

Другие вопросы по теме