2017-04-14 27 views
1

我正在使用警衛來確保用戶在到達他們請求的頁面之前進行身份驗證。如何獲得CanActivate後衛中的url段

特定的用例預見,在用戶輸入網址的一些查詢參數,如https://myserver.com/the-page-i-want?par1=val1&par2=val2

在保護我需要檢索兩個PARAMS和URL段(即的在這種情況下,我想要)。爲了做到這一點我已經實現了下面的一段代碼

export class AuthGuard implements CanActivate { 

    constructor(private router: Router) {} 

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
        const url = state.url; 
        const queryParams = route.queryParams; 
        // some other logic 
    } 

} 

我看到了什麼,當我運行的代碼是,queryParams變量實際上是充滿包含查詢字符串傳遞的參數的對象。另一方面,變量url包含包括參數的整個url字符串(即,在這種情況下它包含這個頁面我想要par1 = val1 & par2 = val2)。

如果我檢查route參數的值,我可以看到,我尋找的信息(即只的頁面,我想做)存儲深某處_urlSegment財產,但不提供通過API。

我運行角度v2.4.9與角路由器3.4.9

如何獲得url段任何建議將非常感謝。

回答

0

您應該改用route.url[0].path。據ActivatedRouteSnapShot文檔,route.url應返回UrlSegment數組,之後你可以訪問你的UrlSegment

+0

不幸地我按航線快照返回的URL是一個空數組的path。這就是我提出問題的原因 – Picci

+0

你的意思是'console.log(route.url)'顯示一個空數組嗎?嗯,這很奇怪。我可以有你的路線配置嗎? –