маршрут перезагрузки, не показывающий компонент

#angular #routes

#angular #маршруты

Вопрос:

У меня есть проект с модулем маршрутизации со следующими путями:

 { path: 'account-settings', component: AccountSettingsComponent, canActivate: [LearningRedirectGuard],
    children: [
      { path: '', redirectTo: 'account', pathMatch: 'full'},
      { path: 'account', component: AccountComponent, data: { menuType: 'learning' }},
      { path: 'password', component: PasswordComponent,  data: { menuType: 'learning' }},
      { path: 'notifications', component: NotificationsComponent,  data: { menuType: 'learning' }},
      { path: 'preferences', component: PreferencesComponent,  data: { menuType: 'learning' }},
      { path: 'security', component: SecurityComponent,  data: { menuType: 'learning' }},
    ]
  }
  

этот проект импортирован в другой более крупный проект, подобный этому

   {
    path: 'learning',
    loadChildren: './../../projects/pxLearning/src/app/app.module#LearningModule',
  },
  

когда я пытаюсь получить доступ к этому маршруту (нажав на кнопку с [routerLink]="['/learning/account-settings/account']" )

 /learning/account-settings/account
  

AccountComponent (или другие) работает нормально

НО если я пытаюсь обновить страницу, тот же маршрут не создаст экземпляр AccountComponent (или других). То же самое происходит, когда я ввожу URL-адрес в браузере, не создается экземпляр компонентов.

Почему это происходит?

редактировать: LearningGuard

 canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
    if (state.url.indexOf('learning') === -1) {
      this.router.navigate(['/learning/'   state.url]);
    }
    return true;
  }
  

Комментарии:

1. вам следует настроить конфигурацию вашего внутреннего сервера так, чтобы он служил в качестве SPA, что обычно означает перенаправление всех запросов, не являющихся исходными, на index.html

2. Возможно, это проблема с LearningRedirectGuard. Не могли бы вы показать защиту, пожалуйста?

3. @MoxxiManagarm, я только что отредактировал сообщение с кодом

Ответ №1:

 if (state.url.indexOf('learning') === -1) {
  

Вы могли бы переписать эту строку в

 if (!state.url.contain('learning')) {
  

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