Угловая защита CanActivate - createUrlTree относительная навигация - PullRequest
2 голосов
/ 29 апреля 2019

В настоящее время у меня есть защита маршрута, например

export class EntityGuard implements CanActivate {
  constructor(private readonly router: Router, ...) {}

  canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): Observable<boolean | UrlTree> {

  ...

Эта защита активируется для URL

basePath/select/10/123

, что означает

basePath/select/:type/:id

Когда определенное условие выполнено, мне нужно принудительно вернуться к

basePath/select/:type

. Как мне это сделать, используя createUrlTree?Например,

if (...) {
   return of(this.router.createUrlTree([../', type]));
}

Мне нужно установить параметр

{ relativeTo: parent }

.Однако я не могу найти способ сделать это.


Мое текущее решение -

private navigateBack(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
  const end = state.url.indexOf(route.url[route.url.length - 1].path);
  const parentUrl = state.url.slice(0, end);
  return of(this.router.createUrlTree([parentUrl]));
}

, которое мне действительно не нравится.Манипулирование струнами для меня не очень.

1 Ответ

2 голосов
/ 29 апреля 2019

Я чувствовал себя в той же ситуации и получил похожее решение. Основная проблема заключается в том, что если мы введем ActivateRoute с помощью конструктора, мы получим предыдущий маршрут. Они планируют пройти ActivateRoute по методу canActivate вместо ActivatedRouteSnapshot.

Это билет: https://github.com/angular/angular/issues/22763

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

Привет.

...