1

angular 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で推奨される回答は、DI エラーをスローするため、使用してガードで現在のルートを取得しprivate state: RouterStateSnapshotthis.route.url機能しません。

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);
}

ただし、これにより、ガードがルートごとに 1 回しか呼び出されないという問題が発生します。:id のようなルート パラメーターの変更では、ガードは呼び出されません。しかし、これは 3.2 ルーターのバグと相関しているようです:

于 2017-02-11T13:50:40.437 に答える