2017-04-12 46 views
0

我目前得到了與(僅適用)的路由器2條路線:路由器導航似乎並沒有被改變成分

{ path: ':org', component: OrgComponent, resolve: [ OrgResolver ] } 
{ path: '', component: NotFoundComponent }, 

解析器是非常直截了當:

constructor(private router: Router, private orgService: OrgService) { } 

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Org> { 
    return this.orgService.getOrgData(route.params['org']).map(function (org) { 
     if (org === null) { 
      this.router.navigate['/']; 
      return null; 
     } else { 
      return org; 
     } 
    }); 
} 

如果我直接去/,我打了NotFoundComponent。如果我轉到像/invalid這樣的OrgService返回爲空的路由(因此無效),該應用確實路由到/,但組件保持不變。而且因爲有在路徑中沒有:org,API調用失敗(我檢查,以確保您在某種字符串傳遞),以及與此錯誤的應用程序崩潰:

ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'navigate' of undefined 

我可以修復崩潰的部分,但我期望的是,如果你去了一個無效的位置,我想把你轉到其他地方。從長遠來看,這將是一個404位置,但現在,我只是試圖弄到路由器。

我不理解導航應該如何工作?

+0

對於路徑爲''''且沒有子節點的路徑使用'pathMatch:'full'' –

+0

您似乎沒有正確調用'navigate'方法:'this.router.navigate(['/']); ',而不是'this.router.navigate ['/'];' –

+0

@VohidjonKarimjonov對不起,這個錯誤是在我寫了一堆測試來弄清楚發生了什麼的時候出現的。我原來的代碼肯定是作爲一個函數,而不是數組。 – RhoVisions

回答

0

一位同事指出,我在.map中使用標準函數,而不是箭頭函數。正因爲如此。 this.router.navigate是失敗的部分,而不是組件的實際加載。

更改

return this.orgService.getOrgData(route.params['org']).map(function (org) { 

return this.orgService.getOrgData(route.params['org']).map((org) => { 

解決的問題。