Issue 1:
I'm submitting a ... (check one with "x")

[x] feature request

Currently it's very verbose to access route data or params from a service or non active route. To simplify this we can introduce RootActivatedRoute with additional props:

class RootActivatedRoute extends ActivatedRoute {
current: ActivatedRoute;
currentSnapshot // for symmetry, but I never use it
}

Every ActivatedRoute has a reference to the root ActivatedRoute so it will be very simple and fast to update these props on every successful navigation.

Instead of

this.router.events
.filter(event => event instanceof NavigationEnd)
.map(() => this.activatedRoute)
.map(route => {
while (route.firstChild) route = route.firstChild;
return route;
})
.filter(route => route.outlet === 'primary')
.mergeMap(route => route.data)
.subscribe((data) => ...);

we will be able to do

this.router.events
.filter(event => event instanceof NavigationEnd)
.mergeMap(() => this.activatedRoute.root.current.data)
.subscribe((data) => ...);

Or we can even make current an Observable so we won't need to use router events:

this.activatedRoute.root.current
.mergeMap(activatedRoute => activatedRoute.data)
.subscribe((data) => ...);

It will work from any component or service.

Should be pretty easy to implement. What do you think @vicb @vsavkin ?

Issue 2:
I'm submitting a ... (check one with "x")

[ ] bug report => search github for a similar issue or PR before submitting
[x] feature request
[x] support request => Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question

Current behavior

When using a parametrized route which targets a component, only this component can access those parameters.

Expected/desired behavior

It might be necessary to read the parameters in other components.

Reproduction of the problem

If the current behavior is a bug or you can illustrate your feature request better with an example, please provide the steps to reproduce and if possible a minimal demo of the problem via https://plnkr.co or similar (you can use this template as a starting point: http://plnkr.co/edit/tpl:AvJOMERrnz94ekVua0u5).

Consider the following route configuration

export const routes: RouterConfig = [
{ path: 'confirmation/:hashID', component: ConfirmationComponent, canActivate: [AuthGuard] },
];

Consider the following code as part of the ConfirmationComponent

this.activatedRoute.params.subscribe(params => {
var hashID = params['hashID'];
},

If I use the above code in any other component, hashID won't be available. It is necessary to read location.path() and extract the hashID value.

What is the expected behavior?

Although I understand that the targeted component it the ConfirmationComponent, sometimes other components might need to have access to the parameters explicitly written in the URL.

What is the motivation / use case for changing the behavior?

Please tell us about your environment:

Angular version: 2.0.0-rc.4

Browser: [all | Chrome XX | Firefox XX | IE XX | Safari XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari | iOS XX UIWebView | iOS XX WKWebView ]

Language: [all | TypeScript 1.8 | ES6/7 | ES5]