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

Jes*_*sen 8 angular2-routing angular

如何检测子组件的路由更改?这是我尝试过的,但我只看到app组件跟踪路由更改.我希望能够检测到url在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")
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢杰斯珀

小智 9

RC3 +解决方案:

constructor(private router: Router) {
  this.router.events.subscribe(event => {
    if (event.constructor.name === 'NavigationStart') {
      console.log(event.url);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

  • ``this.router.events.subscribe(event => {if(event instanceof NavigationStart){console.log(event.url);}});``别忘了从"angular/router"导入NavigationStart (5认同)

Gün*_*uer 4

创建一个全局服务,router在您想要了解路由更改的任何地方订阅并注入该服务。该服务可以自行公开更改Observable,因此感兴趣的组件也可以订阅以自动获取通知。