Je voudrais lire les valeurs des paramètres de requête URL à l'aide d'AngularJS. J'accède au HTML avec l'URL suivante:
http://127.0.0.1:8080/test.html?target=bob
Comme prévu, location.search
c'est "?target=bob"
. Pour accéder à la valeur de target , j'ai trouvé divers exemples répertoriés sur le Web, mais aucun ne fonctionne dans AngularJS 1.0.0rc10. En particulier, les éléments suivants sont tous undefined
:
$location.search.target
$location.search['target']
$location.search()['target']
Quelqu'un sait ce qui fonctionnera? (J'utilise $location
comme paramètre pour mon contrôleur)
Mettre à jour:
J'ai posté une solution ci-dessous, mais je n'en suis pas entièrement satisfait. La documentation du Guide du développeur: Services angulaires: Utilisation de $ location indique ce qui suit $location
:
Quand dois-je utiliser $ location?
Chaque fois que votre application doit réagir à une modification de l'URL actuelle ou si vous souhaitez modifier l'URL actuelle dans le navigateur.
Pour mon scénario, ma page sera ouverte à partir d'une page Web externe avec un paramètre de requête, donc je ne "réagis pas à un changement de l'URL actuelle" en soi. Ce $location
n'est peut - être pas le bon outil pour le travail (pour les moindres détails, voir ma réponse ci-dessous). J'ai donc changé le titre de cette question de "Comment lire les paramètres de requête dans AngularJS en utilisant $ location?" à "Quelle est la manière la plus concise de lire les paramètres de requête dans AngularJS?". Évidemment, je pourrais simplement utiliser javascript et l'expression régulière pour analyser location.search
, mais aller à ce niveau bas pour quelque chose de si basique offense vraiment mes sensibilités de programmeur.
Donc: y a-t-il une meilleure façon d'utiliser $location
que je fais dans ma réponse, ou y a-t-il une alternative concise?
http://127.0.0.1:8080/test.html#?target=bob
fonctionnerait, notez le #
avant le ?
. $location
est une méthode de routage de deuxième niveau qui n'est pas envoyée au serveur.
$location.search()['target']
fonctionne après $locationProvider.html5Mode(true)
avoir été appelé dans un navigateur moderne.