Angular 7 Routing - Как обеспечить, чтобы все маршруты были добавлены с параметром: gymId - PullRequest
0 голосов
/ 13 апреля 2019

Я пытался выяснить, как этого добиться, когда ко всем моим угловым маршрутам добавлен параметр.

Мои маршруты выглядят так:

const routes: Routes = [
  { path: '', component: HomePageComponent },
  {
    path: ':gymId',
    children: [
      { path: 'login', component: UserLoginComponent },
      { path: 'profile', component: UserProfileComponent, canActivate: [AuthGuard] },
      {
        path: 'users',
        children: [
          {
            path: ':userId',
            children: [
                {
                    path: '',
                    component: UserProfileComponent,
                },
            ]
          },
        ]
      },
      {
        path: 'events',
        children: [
          { path: '', component: EventsListComponent },
          {
            path: ':eventId',
            children: [
                {
                    path: '',
                    component: ViewEventComponent,
                },
                {
                  path: 'edit',
                  component: EventEditorComponent,
                  canActivate: [AuthGuard]
              }
            ]
          },
        ]
      },
      {
        path:'event/new',
        component: EventEditorComponent,
        canActivate: [AuthGuard]
      }
    ]
  },

];

Isесть ли способ, когда пользователь попытается перейти на страницу без :gymId, он автоматически добавит это?Например, /profile -> /gym151/profile или если пользователь просто перенаправит на /, он перейдет на /gym151?

1 Ответ

0 голосов
/ 13 апреля 2019

Вы можете попробовать отключить охрану и перенаправить на соответствующий маршрут оттуда.

@Injectable({
  providedIn: 'root'
})
export class RedirectGuard implements CanDeactivate<TodoComponent> {
  canDeactivate(
    component: TodoComponent,
    currentRoute: ActivatedRouteSnapshot,
    currentState: RouterStateSnapshot,
    nextState?: RouterStateSnapshot) {
    this.router.navigateByUrl(`/${currentRoute.params['gymId']}`);
    return true;
  }

  constructor(
    private router: Router
  ) { }
}

как то так https://stackblitz.com/edit/angular-uttust

...