canActivateChild и redirectTo - PullRequest
       7

canActivateChild и redirectTo

0 голосов
/ 28 ноября 2018

Вот мой app.routing.ts

export const appRoutes: Routes = [
  {
    path: '',
    canActivate: [MyAuthGuard],
    canActivateChild: [MyAuthGuard],
    children: [
      {
        path: '',
        redirectTo: '/my-default-page',
        pathMatch: 'full'
      },
      {
        path: 'some-feature',
        redirectTo: '/some-route-defined-in-other-module'
      }
    ]
  },
  { path: '404', component: NotFoundComponent },
  { path: '**', redirectTo: '/404' }
];

Если я перейду к localhost: 4200 / some-feature, я вижу, что MyAuthGuard.canActivateChild не вызывается, однако, если я изменю app.routing.tsна

export const appRoutes: Routes = [
      {
        path: '',
        canActivate: [MyAuthGuard],
        canActivateChild: [MyAuthGuard],
        children: [
          {
            path: '',
            redirectTo: '/my-default-page',
            pathMatch: 'full'
          },
          {
            path: 'some-feature',
            component: MyComponent
          }
        ]
      },
      { path: '404', component: NotFoundComponent },
      { path: '**', redirectTo: '/404' }
    ];

и перейдите к localhost: 4200 / some-feature, теперь я вижу, что MyAuthGuard.canActivateChild вызывается.

Мой вопрос заключается в том, почему MyAuthGuard.canActivateChild не вызывается, когда ребеноктакое перенаправление?

1 Ответ

0 голосов
/ 29 ноября 2018

Насколько я знаю, невозможно перенаправить на маршрут в другой модуль напрямую.Правильный способ сделать это - загрузить модуль в AppRoutingModule следующим образом:

{
  path: 'redirect-feature',
  loadChildren: './other/other.module#OtherModule'
},

Как часть OtherModule вы определяете отдельные маршруты для компонентов в OtherRoutingModule:

const routes: Routes = [
  {
    path: '',
    redirectTo: 'feature',
  },
  {
    path: 'feature',
    component: FeatureComponent,
  }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class OtherRoutingModule { }

Тогда охранники должны работать как положено.Перенаправления для этого модуля также настраиваются в OtherRoutingModule.У вас также есть возможность добавить охрану к маршрутам в OtherRoutingModule, в зависимости от того, что вам нужно.

Я также создал пример в StackBlitz .

...