3

I have an Angular 2 test app running the latest alpha (37). There are just three routes, that look like this:

@RouteConfig([
  { path: '/', component: Home, as: 'home' },
  { path: '/errors', component: Errors, as: 'errors' },
  { path: '/about', component: About, as: 'about' }
])

I can access the routes, and when I place query string params in the URL I can read them just fine. However, a few instants after I read the parameters, I noticed that the route loads fine and the URL refreshes, removing the query string parameters.

In other words, accessing this route:

http://localhost:5555/errors?test=abc

Loads the /errors route, but right after the application loads the URL turns into:

http://localhost:5555/errors

That would be confusing to a user. I would like to keep the query string parameters in the URL.

I know, it's in alpha, but is this a bug or I forgot to set something up on the router? How can I keep whatever query string parameters in the URL?

Thanks!

Oleksii Pavlenko
  • 1,327
  • 1
  • 11
  • 25
Edy Bourne
  • 5,679
  • 13
  • 53
  • 101

3 Answers3

1

This is fixed in Alpha 41. The query string is now persisted.

binarious
  • 4,568
  • 26
  • 35
  • I got exactly the same problem in Angular 2.0.0 beta 12 – tom10271 Apr 22 '16 at 06:19
  • @aokaddaoc Can't reproduce in beta 15. This was the original issue https://github.com/angular/angular/issues/4413. Feel free to comment there or open another issue. – binarious Apr 25 '16 at 11:26
  • Reproduced on Angular 4.3.1, 4.4.6 and 5.0.4: https://stackoverflow.com/questions/47598762/angular-erasing-all-query-parameters#47598970 – Anders Dec 01 '17 at 18:01
1

Updating for Angular 2:
To preserve query parameters present in the current url, add

// import NavigationExtras 
import  { NavigationExtras } from '@angular/router';

// Set our navigation extras object
// that contains our global query params

let navigationExtras: NavigationExtras = {
      preserveQueryParams: true
    };   

// Navigate to the login page with extras
this.router.navigate(['/someLink'], navigationExtras);

For more info, check here:

Ric K
  • 648
  • 1
  • 6
  • 16
0

Try this this.router.navigate(['target'], {preserveQueryParams: true});

prabhatojha
  • 1,925
  • 17
  • 30