Angular 订阅子路由更改,知道在父级中选择了哪个子路由段?
角度v2.2.1,路由器v3.2.1 我有一个带子节点的嵌套路由器,路由器链接如下所示: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 我
/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