2016-07-07 42 views
14

Sto cercando di capire come utilizzare il router di navigazione Angular2 (router 3.0.0-alpha.7) con i parametri di query.Cancella tutte le queryParam con il nuovo router v3 Angular2

posso facilmente passare a un percorso con un queryParam con questa linea:

this._router.navigate(['/login'], {queryParams: {redirect: 'route1'}}); 

Nel 'il login /' componente, faccio un po 'di login che reindirizza al percorso redirect, vale a dire Route1 qui. Tuttavia, dopo il reindirizzamento, i parametri di query redirect rimangono nell'URL, ad esempio, ora sono alla pagina /route1?redirect=route1. Voglio rimuovere il parametro di reindirizzamento qui.

Inoltre, se si passa a un'altra pagina con lo stesso redirect queryParam, non sovrascrive il precedente, ma aggiunge un altro ?redirect=... nell'URL. Vale a dire:

this._router.navigate(['/another-route'], {queryParams: {redirect:'route2'}}); 

mi porta a /another-route?redirect=route2?redirect=route1

E 'possibile cancellare i queryParams durante la navigazione tra i percorsi? Ho provato this._router.navigate(['/route1'], {queryParams: {redirect: null}}); o {queryParams: null} ecc. Ma nessun successo.

risposta

18

Ho lottato anche con questo. Ci si aspetta il router per cancellare parametri di query di default quando si naviga ad un'altra rotta ...

È possibile effettuare una

this._router.navigate(['/route1'], {queryParams: {}}); 

o

this._router.navigateByUrl('/route1'); 

o quando si utilizza routerLink:

<a [routerLink]="['/applications']" [queryParams]="{}"> Applications</a> 
+0

Come posso ottenere lo stesso con routerLinks? ' Applications' genera un errore di analisi. Doc manca questo. – leovrf

+0

Aggiungo questo alla risposta – yarons

+2

... quindi la soluzione è di aggiungere parametri di query vuoti * ovunque * viene utilizzato un collegamento? Questo è ..... terrificante ... – dudewad

6

In realtà ... NON si dovrebbe "aspettarsi il router t o deselezionare i parametri di query ".

Chiaramente te lo aspetti. Ma questo perché non sai di una decisione importante sul design del router ... probabilmente perché, purtroppo, non te l'abbiamo ancora detto nei documenti. Stiamo lavorando per correggerlo ora.

QueryParams sono per i parametri che sono globali attraverso le navigazioni; non cambiano.

MatrixParams sono per i parametri che appartengono alla navigazione corrente; questi cambiano.

Che cosa appartiene a livello globale QueryParams? Le cose che provengono dal server sono candidate. Come token di autenticazione che appartengono ad ogni interazione.

ma richiedeva percorso params (il :id in customer/:id) e matrice opzionale params (come il ;name=Jo* in /customers;name=Jo*) sono locali rispetto a quella di navigazione. È così che potresti specificare una navigazione per i clienti con un filtro del nome opzionale.

Se non si è d'accordo con questo approccio, è fondamentale per il design del router v.3.

Suggerisco di adeguare le vostre aspettative piuttosto che combatterlo.

+0

Quando possiamo aspettarci ulteriori dettagli riguardo a MatrixParams? @Ward – JRulle

+1

Parte di ciò che si trova nel capitolo del router aggiornato nella sezione [Parametri query] (https://angular.io/docs/ts/latest/guide/router.html#!#query-parameters). Ma l'autore e io penso che possiamo essere più chiari. Lo aggiorneremo ancora una volta ... molto presto. – Ward

+0

grazie @Ward, terrò d'occhio la documentazione aggiornata del router – JRulle

0

Si può desiderare di provare questo:

this.router.navigate ([ 'bersaglio'], {preserveQueryParams: false});