0
我已經添加了一個canLoad守衛到延遲加載狀態。我遇到的問題是,如果使用router.navigate()從不同的狀態初始化狀態,那麼我無法獲取任何路由參數。Angular 2:我如何從CanLoad實現獲取路由參數?
因此,這裏是我的路由配置:
path: 'programs/:programId/dashboard',
loadChildren: './program.module#ProgramModule',
canLoad: [ProgramGuard]
,這是ProgramGuard的短版:
export class ProgramGuard implements CanLoad {
canLoad(route: Route): Observable<boolean> {
//route object doesn't have any reference to the route params
let programId = paramFromRoute;
return Observable.create(observer => {
if (programId == authorizedProgramId)
observer.complete(true);
else
observer.complete(false);
}
}
}
我試圖注入ActivatedRoute,試圖從那裏得到他們怎麼得來的那裏,但沒有。
如果用戶在瀏覽器中鍵入URL,那麼沒有問題,因爲我可以從位置對象中提取參數。但是當使用route.navigate時,瀏覽器的位置仍然被設置爲之前的狀態。
任何幫助或想法將不勝感激。
謝謝@DeborahK。我會嘗試明天寫下的最後一個選項,並且告訴你結果。它應該在理論上起作用。現在我正在做的是任何時候我想要路由到該狀態是首先做一個location.go(),它更新瀏覽器的地址,然後route.navigate()。它可以工作,但它實例化狀態的組件兩次。 – jorgenv
您的解決方案使用@AbActiveActivate守護進程添加了一條父路由@DeborahK。我需要做的唯一的改變是處理一個observer.next(boolean),而不是observer.complete(boolean)(這很奇怪,因爲這在canLoad中不起作用)。 – jorgenv
好聽!很高興工作! – DeborahK