138 votes

AngularJS : Comment effacer les paramètres d'interrogation dans l'URL ?

Mon application AngularJS doit avoir accès au profil LinkedIn de l'utilisateur. Pour ce faire, je dois rediriger l'utilisateur vers une URL LinkedIn qui contient un paramètre callback redirect_uri qui indiquera à LinkedIn de rediriger l'utilisateur vers ma webapp et d'inclure un paramètre de requête "code" dans l'URL. Il s'agit d'un flux Oauth 2.0 traditionnel.

Tout fonctionne parfaitement, sauf que LinkedIn redirige l'utilisateur vers l'URL suivante :

http://localhost:8080/?code=XXX&state=YYY#/users/123/providers/LinkedIn/social-sites

Je voudrais supprimer ?code=XXX&state=YYY de l'URL afin de la rendre propre. L'utilisateur n'a pas besoin de voir les paramètres de requête que j'ai reçus de la redirection LinkedIn.

J'ai essayé $location.absUrl($location.path() + $location.hash()).replace() mais il conserve les paramètres de la requête dans l'URL.

Je n'arrive pas non plus à extraire les paramètres de la requête, par exemple "code", en utilisant ($location.search()).code . Il semble que le fait d'avoir ? avant # dans l'URL ci-dessus trompe Angular.

156voto

Julius Points 161

J'utilise

$location.search('key', null)

Comme cela ne supprime pas seulement ma clé, mais la supprime de la visibilité sur l'URL.

108voto

alecswan Points 406

J'ai fini par obtenir la réponse sur le forum AngularJS. Voir ce fil pour plus de détails


Le lien renvoie à un fil de discussion de Google Groups, qui est difficile à lire et ne fournit pas de réponse claire. Pour supprimer les paramètres d'URL, utilisez

$location.url($location.path());

77voto

indie blue Points 1309

Pour supprimer TOUTES les paramètres de la requête, etc :

$location.search({});

Pour supprimer ONE un paramètre de requête particulier, faites :

$location.search('myQueryParam', null);

29voto

basarat Points 22425

Pour effacer un élément, supprimez-le et appelez $$compose

    if ($location.$$search.yourKey) {
        delete $location.$$search.yourKey;
        $location.$$compose();
    }

dérivé de la source angularjs : https://github.com/angular/angular.js/blob/c77b2bcca36cf199478b8fb651972a1f650f646b/src/ng/location.js#L419-L443

27voto

Quintin Points 169

Vous pouvez supprimer un paramètre de requête spécifique en utilisant :

delete $location.$$search.nameOfParameter;

Vous pouvez aussi effacer tous les paramètres de la requête en donnant à search la valeur d'un objet vide :

$location.$$search = {};

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X