Angular 11 – маршрут с использованием именованных перенаправлений на '/'

Я обновляю приложение Angular с версии 10 до версии 11, которое использует routerLink, указывающий на выход с именем dialog, для создания модальных диалогов. Текущий компонент (CoreComponent в примере ниже) должен оставаться видимым при переходе к модальному диалоговому окну. По какой-то причине они перестали работать в версии 11, они всегда перенаправляются на «/». Никаких исключений не создается, и другие основные ссылки работают нормально.
Я создал образец StackBlitz из моей настройки маршрутизации с включенными файлами package.json версий v10 и v11.

Я перепробовал множество предложений из разных блогов и других вопросов, но ни одно из них не помогло мне с маршрутизацией. Версия Angular 11, похоже, реализовала довольно много исправлений, связанных с маршрутизацией и именованными выходами, но я не смог найти ничего конкретного для моего случая в журнале изменений.
Опция relativeLinkResolution: 'legacy' не помогает.

Здесь вам может оказаться полезным использование трассировки отладки для маршрутизации, просто не забудьте отключить ее в своем рабочем приложении. provideRouter(appRoutes, withDebugTracing()) для отдельных проектов или RouterModule.forRoot(routes,{enableTracing: true} ); для модулей. Он сообщит вам, что вы пытались сделать, и выведет из системы, какая часть выходит из строя и к чему возвращается.

Alex 06.09.2024 11:25
Тестирование функциональных 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
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не думаю, что relativeLinkResolution связано с тем, как указано в этом вопросе: Angular RelativeLinkResolution — различия между устаревшим и исправленным.

Из того, что я прочитал в вашей демонстрации StackBlitz и сделал несколько проб и ошибок:

Проблема в вашем routes в core-routing.module.ts. Вы используете маршрут '' для перехода на страницу CoreComponent. Это приводит к тому, что маршрут всегда перенаправляется на «/».

Вы должны использовать pathMatch: 'full', чтобы маршрут с '' или '/' перенаправлялся только на страницу CoreComponent.

Это должно быть так:

const routes: Routes = [
  {
    component: CoreComponent,
    path: '',
    pathMatch: 'full'
  },
];

Кроме того, вам не нужно импортировать RouterModule в AppModule, поскольку это, похоже, дублирует цель в AppRoutingModule, которая будет импортировать RoutingModule.

@NgModule({
  imports: [
    BrowserModule,
    //RouterModule,
    AppRoutingModule,
    SharedModule,
    CoreModule,
  ],
  declarations: [AppComponent],
  bootstrap: [AppComponent],
})
export class AppModule {}

Обновлено: если вы хотите, чтобы CoreComponent отображался постоянно:

  1. Импортируйте CoreModule вместо redirectTo: '/' в app-routing.module.ts.
const routes: Routes = [
  {
    path: '',
    pathMatch: 'full',
    loadChildren: () => import('./core/core.module').then((m) => m.CoreModule),
  },
  ...
];
  1. Удалите pathMatch: 'full' для приведенного ниже маршрута в файле core-routing.module.ts.
const routes: Routes = [
  {
    component: CoreComponent,
    path: '',
  },
];

Демо @ StackBlitz

Спасибо, это решает проблему с перенаправлением. Однако мне нужно, чтобы текущий компонент (CoreComponent в примере) оставался видимым. Я отредактировал свой вопрос с этой информацией.

zserdely 06.09.2024 11:19

Привет, я обновил ответ и демо-версию StackBlitz.

Yong Shun 06.09.2024 11:37

Это решение сработало, большое спасибо! Эта проблема уже несколько дней вызывала у меня головную боль.

zserdely 06.09.2024 12:47

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