Angular2(rc4) - 检查父组件中的活动子路由

时间:2016-07-30 09:31:52

标签: typescript angular router

我正在尝试检查父组件中的活动子路由,但我遇到了困难。

我尝试通过这样的方式订阅ActivatedRoute:

class ParentComponent {
    constructor(private _route:ActivatedRoute) {}

    ngOnInit() {
        this._route.data.subscribe(value => console.log(value)});
    }
}

我已经在Stack Overflow上阅读了很多线程,但找不到关于父组件子路由的检查和更新的解决方案。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

在编写这些行时,所选答案似乎不再起作用了。

如果您希望在路线更改时收到通知,您可以订阅Router.events观察点。例如,NavigationEnd个事件将url存储为属性:

 this.router.events.filter(evt => evt instanceof NavigationEnd)
                   .map(evt =>evt.url)
                   .subscribe(url=>console.log(url));

如果您想将当前路线与儿童路径进行比较,请说"child" - 。您可以使用Router.isActive()方法:

let events = this.router.events;
events.filter(evt => evt instanceof NavigationEnd)
       .map(() =>{
            let exact=true;
            let childRoute=this.router.createUrlTree(["child"], {relativeTo: this.route}
            return this.router.isActive(childRoute,exact);
        })
        .subscribe(active=>console.log(`child route is active :${active`));

注意:

  • this.routerRouter个实例
  • this.routeActivatedRoute
  • 的一个实例
  • exact用于完全匹配:如果路线"child/grand-child" this.router.isActive(route,true)将返回false

答案 1 :(得分:2)

您可以使用以下代码段访问活动子路由

constructor(private router:Router, private currentActivatedRoute:ActivatedRoute)
// this should be called in ngOnInit
    var state = this.router.routerState
    var children = state.children(this.currentActivatedRoute)

RouterStateTree