2017-07-24 54 views
1

我觉得真的很难作出一个子子路径参数工作角2 - PARAM缺失分次路线

这些第一2级做工精细

http://localhost:8080/#/customer/4/ 
http://localhost:8080/#/customer/4/campaign/13 
http://localhost:8080/#/customer/4/campaign/13/segments 

,但一旦我尝试这一个

http://localhost:8080/#/customer/4/campaign/13/segment/1 

第三个参数/ 1未填充,所以我不能使用它

this.activatedRoute.parent.params.subscribe((params: any) => { 
        let customerId = +params['id']; <<< present 
        let campaignId = +params['cid']; <<< present 
        let segmentId = +params['sid']; <<< NaN !!!! 
        .... 
       }); 

这里是我的路由设置

const customersRoutes: Routes = [ 
    { path: 'customer/:id', 
     canActivate: [AuthGuardService], 
     children: [ 
     { path: '', component: CustomerComponent }, 
     { path: 'campaign/:cid', component: CustomerCampaignComponent , 
      children:[ 
      { path: 'segments', component: SegmentsComponent }, 
      { path: 'segment/:sid', component: SegmentComponent }, 
      ] 
     }, 
     ] 
    } 
]; 

任何人都知道我怎么能解决这个问题?

感谢

+0

如果您手动键入的URL第三个参数,它的工作与否? –

+0

它正确的路由,但最后的ID永远不会进入params数组 – phil1234

回答

1

假设你是SegmentComponent

sid不父路径存在,但存在于路由本身。

this.activatedRoute.params.subscribe((params: any) => { 
    let segmentId = +params['sid'];     .... 
}); 

可以merge的观测如下:

let obs = this.activatedRoute.params.combineLatest(this.activatedRoute.parent.params) 
obs.subscribe(...) 
+0

另一个角度2路由器奇怪,当我冲浪到父路由,我设法得到cid?我应该有同样的问题...无论如何,thx,我会合并这两个流:-) – phil1234

+0

这是一个很好的问题。通常情况下,你必须在'CustomerCampaignComponent'中遇到同样的问题 –

+0

actualy merge不会合并两个值,而combineLatest会这样做......我也尝试concat,但它只返回一个值 – phil1234

0

我结合这两种PARAMS喜欢这一点,但作为Radouane提到了一个能做到这一点,否则

this.activatedRoute.params.combineLatest(this.activatedRoute.parent.params,(val1, val2) => { 
        console.dir(val1); 
        console.dir(val2); 
        return {val1: val1, val2: val2}; 
       }) 
       .subscribe(res => { console.dir(res)});