Eu gostaria de ler os valores dos parâmetros de consulta de URL usando AngularJS. Estou acessando o HTML com o seguinte URL:
http://127.0.0.1:8080/test.html?target=bob
Como esperado, location.search
é "?target=bob"
. Para acessar o valor do target , encontrei vários exemplos listados na Web, mas nenhum deles funciona no AngularJS 1.0.0rc10. Em particular, são todos os seguintes undefined
:
$location.search.target
$location.search['target']
$location.search()['target']
Alguém sabe o que vai funcionar? (Estou usando $location
como parâmetro para o meu controlador)
Atualizar:
Publiquei uma solução abaixo, mas não estou totalmente satisfeito com ela. A documentação do Developer Guide: Angular Services: Using $ location indica o seguinte sobre $location
:
Quando devo usar $ location?
Sempre que seu aplicativo precisar reagir a uma alteração no URL atual ou se você desejar alterar o URL atual no navegador.
Para o meu cenário, minha página será aberta a partir de uma página da Web externa com um parâmetro de consulta, por isso não estou "reagindo a uma alteração no URL atual" por si só. Portanto, talvez $location
não seja a ferramenta certa para o trabalho (para os detalhes feios, veja minha resposta abaixo). Portanto, mudei o título desta pergunta de "Como ler os parâmetros de consulta no AngularJS usando $ location?" para "Qual é a maneira mais concisa de ler parâmetros de consulta no AngularJS?". Obviamente, eu poderia apenas usar javascript e expressão regular para analisar location.search
, mas ir para um nível tão baixo para algo tão básico realmente ofende minhas sensibilidades de programador.
Então: existe uma maneira melhor de usar $location
do que na minha resposta ou existe uma alternativa concisa?
http://127.0.0.1:8080/test.html#?target=bob
funcionaria, observe o #
antes do ?
. $location
é um método de roteamento de segundo nível que não é enviado ao servidor.
$location.search()['target']
funciona depois de $locationProvider.html5Mode(true)
ter sido chamado em um navegador moderno.