2017-05-23 173 views
1

我有以下航線配置:無法訪問URL片段父PARAM

const routes: Routes = [ 
    { 
     path: ':org', 
     component: OrgComponent, 
     resolve: { 
      org: OrgResolver, 
     }, 
     children: [ 
      { 
       path: 'events', 
       component: EventsListComponent, 
      }, 
      ...orgAdminRoutes 
     ] 
    } 
]; 

export const orgAdminRoutes: Route[] = [ 
    { 
     path: 'admin', 
     component: AdminComponent, 
     canActivate: [ 
      AdminGuard 
     ], 
     children: [ 
      { 
       path: 'users', 
       component: UsersComponent 
      } 
     ] 
    }, 
]; 

orgAdminRoutes是在不同的文件中。

但是,當我點擊諸如http://localhost:4200/google/admin之類的路線時,雖然它嘗試導航到AdminComponent,但CanActivate警衛觸發但顯然無法看到父網址片段。當我console.log ActivatedRouteSnapshot,url參數只有一個元素('管理員'),雖然_urlSegment有2預期(不知道這是否是預期的行爲),並且param是空的。

我應該無法訪問:org URL參數嗎?我需要它來警惕,但不知道爲什麼我看不到它。

我正在運行Angular 4.0.x,如果它很重要。

+0

檢查[這](HTTPS,因爲你需要從子段訪問它,你可以使用parentpathFromRoot性質,做://angular.io/docs/ts/latest/api/router/index/ActivatedRoute-interface.html#!#pathFromRoot-anchor) –

+0

如何找出發生了什麼問題的方法?很顯然,它與路由匹配,因爲它正在到達正確的組件,但是'params'成員空着,所以我的警衛工作不正常。我總是可以手動分離路線,但這會破壞參數功能的目的。 – RhoVisions

+0

當您導航到'google.com/admin'時,只有'path:'admin','route被激活,'path:':org','沒有被激活 –

回答

0

每個激活的路由包含自己的URL段數據。所以當你導航到:

/google/admin 

會有三個部分:[ {url.path: ''}, {url.path: 'google'}, {url.path: 'admin'} ]。總是有空路徑的第一個根段。

第二個段將在snapshot.params.org中包含org參數。

class AdminComponent { 
    constructor(r: ActivatedRoute) { 
     console.log(r.parent.snapshot.params.org); 
     console.log(r.pathFromRoot[1].snapshot.params.org); 
    } 

你可以在保護相同的信息:

canActivate(snapshot) { 
    console.log(snapshot.parent.params.org); 
+0

嘿,謝謝你的回答。具有諷刺意味的是,我在一個小時後找到了同樣的答案,但我很高興有人迴應我的發現。這讓我感覺更好,我是如何做到的:) – RhoVisions

+0

是的,當然,這是正確的方式:) –