2017-05-05 127 views
9
const appRoutes: Routes = [ 
    { path: 'parent', component: parentComp, data: { foo: 'parent data' }, children: [ 
    { path: 'child1', component: childComp1, data: { bar: 'child data 1' }, 
    { path: 'child2', component: childComp2, data: { bar: 'child data 2' } 
    ]} 
]; 

如果我瀏覽到/parent/child2,然後看看ActivatedRouteparentCompdata.foo定義,但data.bar不是。我可以訪問所有孩子的數組,但我不知道哪一個被激活。如何從父路由組件訪問激活的子路由數據?

如何從父路由組件訪問激活的子路由數據?

回答

8

第一個孩子會給你訪問數據

constructor(route: ActivatedRoute) { 
    route.url.subscribe(() => { 
    console.log(route.snapshot.firstChild.data); 
    }); 
} 
+2

所以'firstChild'不在路線兒童定義的第一個孩子,但其激活孩子的第一個孩子? – adamdport

+0

你知道如何在相同的場景中使用observable嗎?我試過this.route.firstChild.data.subscribe,但是當我導航到其他子組件時,它不會被觸發? – jbojcic

+0

@Julia,你爲什麼不在嵌套路由/命名空間下嵌套這些子路由?您的答案從'route.firstChild.data'更改爲'route.firstChild.firstChild.data'。將它再次嵌套,並且您有'route.firstChild.firstChild.firstChild.data'。如果您有多個參考,那可能意味着巨大的ChangeCost。 「ActivatedRouteSnapshot」需要的是一個'route.lastChild',以便始終獲得鏈中最遠的對象。問題是,* route.firstChild是我在路由的'children'數組中首次聲明的嗎?或者,是否是''/ root /祖父母/父母/子女/孫子女'的下一位?'* – Cody

相關問題