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

[ ] bug report
[x] feature request
[ ] support request => Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question

Current behavior

There doesn't seem to be a good way to interact with global and per-route query parameters.

Let's say you have a search page and would like to apply filters that will be reflected in the url e.g. /search?fizz=buzz&foo=bar or /search;fizz=buzz;type=bar. I would like to be able to delete my "fizz" filter and remove this from the url for a result of /search?foo=bar or /search;foo=bar.

Currently,

this._router.navigate(['../', this._route.snapshot.url[0].path , {type: 'bar'}], {relativeTo: this._route});

will get me this behavior for per-route parameters or similarly for their global counterparts, but I have to retrieve the parameter object and play with it myself. Specifically with per-route parameters, there isn't a way to only change the queryParams without using ['../', '', ] followed by the parameters since in the current version trying something like ['./', ] will throw an error (though it looks to be explicitly checked and disallowed in 34b3c53).

Expected/desired behavior

I would like to be able to easily manipulate the local and global query parameters. It looks like this will be easier to do with global query params after 23ee29b though I would also like to be able to do this for local query params. Additionally, the current need to reach into the route.snapshot object to get the current path in order to manipulate the query parameters feels unnecessary and not robust.

Reproduction of the problem

see "Current behavior"

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

Other frameworks will allow me to easily perform this sort of manipulation and I would be able to like to do this the proper "Angular" way

Please tell us about your environment:

Angular version: 2.0.0-rc.4

Browser: [Chrome 51]

Language: [TypeScript 1.8.10]

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

[ ] bug report
[x] feature request
[ ] support request => Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question

Current behavior

When navigating via the router service, a string path is required even if navigating within the same route, but only changing route parameters

Expected/desired behavior

If only providing an object with route params, the router should take the current route path and navigate with the updated parameters.

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).

What is the expected behavior?

Given the following routes

const projectsRoutes: RouterConfig = [
{
path: "projects",
component: ProjectsComponent,
children: [
{
path: "all",
component: ProjectListComponent
}
]
}
];

From within the ProjectListComponent I should be able to use

this.router.navigate([ { query: 'test' } ], { relativeTo: this.activatedRoute });

and the router navigate to

/projects/all;query=test

Currently an error is thrown: TypeError: Cannot read property 'path' of undefined

To make this work I have to traverse upwards to come back to the same route.

this.router.navigate([ "../all", { query: 'test' } ], { relativeTo: this.activatedRoute });

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

Navigating relatively within the current route

Please tell us about your environment:

Angular version: 2.0.0-rc.X

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 X.X | ES6/7 | ES5 | Dart]

cc: @bennadel @vsavkin @wardbell