Есть ли способ вызвать canActivate Guard при переходе от дочернего маршрута к родительскому? - PullRequest
0 голосов
/ 08 мая 2020

У меня есть маршрут в маршрутизаторе root до go, через который мне нужно проверить в Guard.

app-routing.module.ts

{
 path: 'toys',
 component: ToysComponent,
},
{
 path: 'clothes',
 canActivate: [ClothesGuard],
 loadChildren: ()=> import('../clothes/clothes.module')
    .then((m) => m.ClothesModule)
}

clothing-routing.module.ts:

{
 path: '',
 component: ClothesComponent
},
{
 path: 'shirts',
 loadChildren: ()=> import('../shirts/shirts.module')
    .then((m) => m.ShirtsModule)
}

shirts-routing.module.ts

{
 path: '',
 component: ShirtsComponent
}

Это отлично работает, когда я go из root путь к / одежду или со страницы / игрушки на / одежду . Но. Если я перейду по ссылке со страницы / одежду на / одежду / рубашки , а затем нажму кнопку «Назад» в браузере ИЛИ щелкну ссылку

<a routerLink="/clothes">

, затем ClothesGuard не будет называться , а страница / clothing все равно откроется.

Чтобы исправить это, я расширил ClothesGuard с помощью интерфейса CanDeactivate , где я проверяю, равен ли nextState.url / clothing . И добавил в роутер:

shirts-routing.module.ts

{
 path: '',
 component: ShirtsComponent,
 canDeactivate: [ClothesGuard]
}

Теперь все работает отлично, и проверка выполняется каждый раз при нажатии на / clothing ссылка со страницы / clothing / shirts .

Но теперь мне нужно добавить эту защиту CanDeactivate на все пути внутри / одежду маршрут, например

/ одежда / джинсы

/ одежда / костюмы

/ одежда / юбки et c.

Есть ли лучший способ выполнить такую ​​же проверку при переходе на страницу, независимо от того, был ли нажат дочерний маршрут, родственный маршрут или кнопка возврата браузера?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...