I\'m trying to get the current route name or route path in my app.component when the route changes so that I can use the route name as a page class around a wrapper div. I\'m t
Steve's answer is the one documented currently, but the url observable on ActivatedRoute
is not firing for me except when I first hit the base url (ex: going from /index to /index/item works, but going from /index/item to index/item/2, index/dashboard, or even /index does not).
I'm not sure if the following solution is a best practice nor what the performance implications are, but I was able to get the active route on the NavigationEnd
event of the router with the following:
import { Component, OnInit, OnDestroy } from '@angular/core';
import { ROUTER_DIRECTIVES, Router, NavigationEnd } from '@angular/router';
@Component({
selector: 'navbar',
directives: [ROUTER_DIRECTIVES],
template: `
...
`
})
export class NavBarComponent implements OnInit, OnDestroy {
private sub: any;
constructor(private router: Router) {
}
ngOnInit() {
this.sub = this.router.events.subscribe(e => {
if (e instanceof NavigationEnd) {
console.log(e.url);
}
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
}
This fires every time you change the route, regardless of how deep you are in the url tree or where you navigate to/from.
This would probably help,
import { CanActivate, Router, RouterStateSnapshot } from '@angular/router';
@Component({
selector: 'my-component',
templateUrl: 'my-component.html'
})
export class MyComponent implements CanActivate {
constructor(private router: Router) {}
canActivate(state: RouterStateSnapshot) {
// this is the future route you are intended to visit
console.log(state.url);
}
}
More details at https://angular.io/docs/ts/latest/guide/router.html