首页 文章

Angular 2.0,如何检测子组件的路由更改

提问于
浏览
6

如何检测子组件的路由更改?这是我尝试过的,但我只看到app组件跟踪路由更改 . 我希望能够检测到网址何时从例如在MetaDetailView组件中#/ meta / a / b / c到#/ meta / a / b / c / d .

@RouteConfig([
    { path: '/', name: 'Home', redirectTo: ['Meta']},
    { path: '/meta/...', name: 'Meta', component: MetaMainComponent, useAsDefault: true},
    ...other routes...,
  ])    
export class AppComponent {
    constructor(private _router: Router) {
        _router.subscribe( (url) => console.log("app.url = " + url));
    }
}

@RouteConfig([
    { path: '/*other', name: 'Detail', component: MetaDetailViewComponent, useAsDefault: true},
])
export class MetaMainComponent {
    constructor(private _router: Router) {
        _router.subscribe( (url) => console.log("metamain.url = " + url));
        console.log("MetaMainComponent")
    }
}

export class MetaDetailViewComponent {
    constructor(private _router: Router) {
        _router.subscribe( (url) => console.log("metadetail.url = " + url));
        console.log("MetaDetailViewComponent")
    }
}

谢谢杰斯珀

3 回答

  • 3

    创建一个订阅 router 的全局服务,并将服务注入您想要了解的有关路由更改的任何位置 . 该服务可以通过 Observable 本身公开更改,因此感兴趣的组件也可以订阅以自动获得通知 .

  • 3

    RC3解决方案:

    constructor(private router: Router) {
      this.router.events.subscribe(event => {
        if (event.constructor.name === 'NavigationStart') {
          console.log(event.url);
        }
      });
    }
    
  • 7

    您可以从任何子路由器进行root访问:

    _router.root.subscribe(route => console.log('route', route));
    

相关问题