1

如何获取用户尝试在角度 2 的 canActivate 防护中打开的路线?

我怎样才能让守卫监视每个路由参数的变化,例如。路线内的ID更改?

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中的建议答案get current route in guard usingprivate state: RouterStateSnapshot 然后this.route.url对我不起作用,因为它会引发 DI 错误:

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

1 回答 1

3

以下似乎可行,但是路由和状态不得注入构造函数中,因为这会导致错误。

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

然而,这会导致每个路由只调用一次守卫的问题。对于 :id 等路由参数的更改,不会调用警卫。但这似乎与 3.2 路由器中的错误有关:

于 2017-02-11T13:50:40.437 回答