web-dev-qa-db-fra.com

router.navigate avec les paramètres de requête Angular 5

J'ai un problème avec le routage vers une route avec des paramètres de requête, j'ai une fonction comme si

goToLink(link) {
    this.router.navigate([`${link.split('?')[0]}`, { queryParams: this.sortParams(link)}]);
}

et cette fonction

sortParams(link) {
    let queryParams = url.split('?')[1];
    let params = queryParams.split('&');
    let pair = null;
    let data = {};
    params.forEach((d) => {
      pair = d.split('=');
      data[`${pair[0]}`] = pair[1];
    });
    return data;
}

ok donc fondamentalement ce qui se passe, j'ai une fonction appelée goToLink() et qui prend dans une URL et l'URL qui est passé est une chaîne avec des paramètres de requête comme so ..

https://website.com/page?id=37&username=jimmy

ce qui précède n’est qu’un exemple; ce n’est pas ce à quoi il ressemble en réalité mais c’est une chaîne de liens avec des paramètres de requête; c’est pourquoi je supprime les paramètres de la chaîne et les stocke dans un objet de données dans la fonction sortParams() afin quand je passe la chaîne ci-dessus, je reçois un objet qui ressemble à ceci

{id: 37, username: 'jimmy'}

maintenant, c’est ce que je passe dans la section queryParams: du routeur.navigate,

la fonction devrait ressembler à ceci quand l'objet est retourné

this.router.navigate([`${link.split('?')[0]}`, { queryParams: {id: 37, username: 'jimmy'}}]);

donc je route avec succès vers la route souhaitée, mais les paramètres de requête ressemblent à ceci ..

/page;queryParams=%5Bobject%20Object%5D

Est-ce que je fais quelque chose de mal ici??

Toute aide serait appréciée!

EDIT

Si je change juste la fonction à cette

 this.router.navigate([`${link.split('?')[0]}`, { queryParams: {id: 37, username: 'jimmy'}}]);

Je reçois la même URL /page;queryParams=%5Bobject%20Object%5D

14
Smokey Dawson

Peut-être que vous aviez placé la parenthèse supposée pour le 1er param mais que vous l’aviez encapsulée sur toute la ligne de route

Votre code:

// This is the end of your route statement:  '}}]);' which the close bracket is included
this.router.navigate([`${link.split('?')[0]}`, { queryParams: {id: 37, username: 'jimmy'}}]);

Mise à jour de l'itinéraire:

placez la parenthèse ] dans le premier paramètre uniquement, essayez de ne pas la placer sur la dernière partie de l'instruction route.

// Update end line: '}});'
this.router.navigate([`${link.split('?')[0]}`], { queryParams: {id: 37, username: 'jimmy'}});
24
KShewengger