2017-02-11 16 views
1

如何獲得用戶嘗試在角度2的canActivate警衛內打開的路線?如何在ng2 guard中獲取目標路由canActivate?

我該如何讓每個路線參數變化的警衛監視例如。路由中的id改變了嗎?在Angular 2 get current route in guard

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

建議答案使用private state: RouterStateSnapshot 然後this.route.url不適合我的工作,因爲它拋出一個DI錯誤:

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

回答

2

以下似乎工作,但路線和狀態切不可注入構造函數,因爲這會導致錯誤。

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

但是,這導致的問題是每個路由只調用一次防護。對於路由參數的更改,如:id,警衛沒有被調用。但是,這似乎是在3.2路由器的錯誤關聯:

相關問題