如何在ng2 Guard canActivate中获取目标路由?

2024-04-11

如何获取用户尝试在角度 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在守卫中获取当前路线 https://stackoverflow.com/questions/39747246/angular-2-get-current-route-in-guard using private state: RouterStateSnapshot进而this.route.url对我不起作用,因为它会引发 DI 错误:

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

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

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

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

  • 多次调用 angular2 路由守卫 https://stackoverflow.com/questions/40692497/calling-angular2-route-guard-multiple-times/40693108#40693108
  • https://github.com/angular/angular/issues/12851 https://github.com/angular/angular/issues/12851
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在ng2 Guard canActivate中获取目标路由? 的相关文章

随机推荐