Как получить целевой маршрут в ng2 guard canActivate?

Как я могу получить маршрут, который пользователь пытается открыть в охраннике canActivate в angular 2?

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

import { Injectable }       from '@angular/core';
import {Observable, Observer, Subject} from "rxjs/Rx";

@Injectable()
export class RightsGuard implements CanActivate {
    constructor(
      private router: Router,
      private route: ActivatedRoute
      // private state: RouterStateSnapshot
    ) { }

    canActivate(): Observable<boolean> | boolean {
      var targetUrl = ???
      // var targetUrl = this.router.url // is showing previous url?
      return true;
    }
}

Предлагаемый ответ в Angular 2 получить текущий маршрут в защите с помощью private state: RouterStateSnapshot, а затем this.route.url у меня не работает, так как выдает ошибку DI:

Error: Uncaught (in promise): Error: DI Error
Error: DI Error

person Manuel    schedule 11.02.2017    source источник


Ответы (1)


Следующее, кажется, работает, однако маршрут и состояние не должны вводиться в конструктор, поскольку это вызывает ошибки.

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
  console.log("route-access",state);
}

Однако это приводит к тому, что защита вызывается только один раз для каждого маршрута. При изменении параметров маршрута, таких как :id, защита не вызывается. Но это похоже на ошибку в роутере 3.2:

person Manuel    schedule 11.02.2017