Angular v2.2.1,路由器 v3.2.1
我有一个带子代的嵌套路由器,路由器链接如下所示:
SettingWithCopyWarning
(/todo/iwgv4ehyav544f7c/zone1
是zone1
)
todo/:id
(/todo/iwgv4ehyav544f7c/zone2
是zone2
)
现在请记住,todo/:id
页面有自己的路由器插座,可以显示孩子们。
在父母(todo/:id
)中,我有2个按钮,Button1和Button2。
我希望在子路由todo/:id
处于活动状态时显示Button1,在zone1
处于活动状态时显示Button2。
我设法制作了一些东西,但我不认为这是正确的方法:
zone2
还有另一种更好的方式来订阅路由器并获取子参数,所以我可以在父级中使用此值吗?
编辑:
到目前为止,我尝试过的其他一些东西在Victor Savkin的书中没有起作用:
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"
})
答案 0 :(得分:2)
路由器有一个更简单,更优雅的解决方案来确定哪条路径处于活动状态,您可以根据活动路径隐藏和显示元素。
文档:https://angular.io/docs/ts/latest/api/router/index/Router-class.html#!#isActive-anchor
应用于我上面的项目示例:
在TS:constructor(router: Router){}
在HTML中:*ngIf="router.isActive('/todo/' + id + '/zone1')"
您从路线参数或所选对象中提取ID。