Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 订阅子路由更改,知道在父级中选择了哪个子路由段?_Angular_Angular2 Routing - Fatal编程技术网

Angular 订阅子路由更改,知道在父级中选择了哪个子路由段?

Angular 订阅子路由更改,知道在父级中选择了哪个子路由段?,angular,angular2-routing,Angular,Angular2 Routing,角度v2.2.1,路由器v3.2.1 我有一个带子节点的嵌套路由器,路由器链接如下所示: /todo/iwgv4ehyav544f7c/zone1(zone1是todo/:id的子路由) /todo/iwgv4ehyav544f7c/zone2(zone2是todo/:id的子路由) 现在请记住,todo/:id页面有自己的路由器出口,用于显示子项 在父项(todo/:id)中,我有两个按钮,按钮1和按钮2 我想在子路由zone1处于活动状态时显示按钮1,在zone2处于活动状态时显示按钮2 我

角度v2.2.1,路由器v3.2.1

我有一个带子节点的嵌套路由器,路由器链接如下所示:

/todo/iwgv4ehyav544f7c/zone1
zone1
todo/:id
的子路由)

/todo/iwgv4ehyav544f7c/zone2
zone2
todo/:id
的子路由)

现在请记住,
todo/:id
页面有自己的路由器出口,用于显示子项

在父项(
todo/:id
)中,我有两个按钮,按钮1和按钮2

我想在子路由
zone1
处于活动状态时显示按钮1,在
zone2
处于活动状态时显示按钮2

我成功地制造了一些东西,但我认为这不是正确的方法:

   router.events
     .filter(event => event instanceof NavigationEnd)
     .map(value => value.url.split("/")) // what I get: ["","todo","iwgv4ehyav544f7c","zone1"]
     .map(value => value[3]) // selecting the value at id 3 which is the child param
     .subscribe(response => {
       this.activatedChildUrl = response;  // end value is "zone1"
     })
是否有其他更好的方法订阅路由器并获取子参数,以便我可以在父级中使用此值?

编辑:

到目前为止,维克多·萨夫金(Victor Savkin)的书中没有提到的其他东西:

activatedRoute.url.subscribe(() =>{
  activatedRoute.snapshot.firstChild.url[0].path

}); // is firing only once 

路由器有一个更简单和优雅的解决方案来确定哪条路径是活动的,您可以根据活动路由隐藏和显示元素

文档

应用于上述我的项目示例:

在TS:
构造函数(路由器:路由器){}

在HTML中:
*ngIf=“router.isActive('/todo/'+id+'/zone1')”

您可以从路由参数或所选对象中提取id