angular навигация и валидация - маршруты с параметрами - PullRequest
0 голосов
/ 14 января 2020

в моем проекте у меня есть несколько маршрутов, которые принимают параметры.

пара моих маршрутов (братьев и сестер):

{
  path: '', component: HomeComponent, 
},
{
  path: 'factories', component: FactoriesComponent, canActivate: [AuthGuard], 
  resolve: [FactoriesResolverService],
  children: [
    {
      path: ':index/factory', component: DetailsFactoryComponent, canActivate: [DetailsFactoryGuard]
    },
    {
      path: ':index/factory/edit', component: EditFactoryComponent, canActivate: [DetailsFactoryGuard]
    }
  ]  
},

у меня есть несколько вещей, которые я просто не могу понять как сделать

  1. после того, как я отредактирую фабрику (например, URL: 'factory / 3 / factor / edit'), я хочу вернуться к URL 'фабрики'.

я попробовал следующее:

private router: Router
private route: ActivatedRoute

this.router.navigate(['../']);
this.router.navigate(['../'], {relativeTo: this.route});
this.router.navigate(['../../'], {relativeTo: this.route});
this.router.navigate(['../..'], {relativeTo: this.route});
this.router.navigate([''], {relativeTo: this.route});
this.router.navigate(['/'], {relativeTo: this.route});
this.router.navigate(['../'], {relativeTo: this.route.parent});

все, что привело к перенаправлению на домашнюю страницу / компонент (url: "")

я не могу перемещаться по жесткому пути ( this.router.navigate (['фабрики']);) потому что у меня есть другой путь, который имеет возможность редактировать фабрику, и я также хочу вернуться туда к родительскому пути (из 'details /: index / factory / edit') вернуться к «подробностям»)

Я хочу проверить параметр «index» - проверьте, что у меня есть фабрика, которая соответствует номеру, а также проверьте, что это число. в случае сбоя проверки перенаправьте на путь «фабрики» / «детали».

я попытался сделать это через охрану, но когда пользователь обновил sh страницу, мои данные фабрики сбрасываются (я используйте состояние NgRX для сохранения данных). я пытался использовать распознаватель, но распознаватель вызывался только после охранника, и я не могу выбраться от охранника, или я попал в бесконечное число. oop

есть идеи, как это реализовать?

=======================

РЕДАКТИРОВАТЬ

относительно первой проблемы, я нашел решение:

const currUrl = this.route.snapshot ['_ routerState']. Url.substring (1) .split ("/"); this.router.navigate ([currUrl [0]]);

currUrl будет иметь массив с полным URL-адресом - первое значение массива - это родительский путь

, все еще интересующийся Вторая проблема

1 Ответ

0 голосов
/ 14 января 2020

вы можете просто сохранить индекс как свойство в вашем классе и перемещаться по этому свойству

export class Component implements OnInit {
   index: string | number;

   ngOnInit() {
     this.index = this.route.snapshot.params['index'];
   }


   onNavigate() {
      this.router.navigate(['/', this.index,'factory' ]);
   }

}
...