Me gustaría leer los valores de los parámetros de consulta de URL utilizando AngularJS. Estoy accediendo al HTML con la siguiente URL:
http://127.0.0.1:8080/test.html?target=bob
Como se esperaba, location.search
es "?target=bob"
. Para acceder al valor de target , he encontrado varios ejemplos enumerados en la web, pero ninguno de ellos funciona en AngularJS 1.0.0rc10. En particular, los siguientes son todos undefined
:
$location.search.target
$location.search['target']
$location.search()['target']
Alguien sabe lo que funcionará? (Estoy usando $location
como parámetro para mi controlador)
Actualizar:
He publicado una solución a continuación, pero no estoy completamente satisfecho con ella. La documentación en la Guía del desarrollador: Servicios angulares: el uso de $ location establece lo siguiente sobre $location
:
¿Cuándo debo usar $ location?
Cada vez que su aplicación necesite reaccionar a un cambio en la URL actual o si desea cambiar la URL actual en el navegador.
Para mi escenario, mi página se abrirá desde una página web externa con un parámetro de consulta, por lo que no estoy "reaccionando a un cambio en la URL actual" per se. Entonces, tal vez $location
no sea la herramienta adecuada para el trabajo (para los detalles feos, vea mi respuesta a continuación). Por lo tanto, he cambiado el título de esta pregunta de "¿Cómo leer los parámetros de consulta en AngularJS usando $ location?" a "¿Cuál es la forma más concisa de leer los parámetros de consulta en AngularJS?". Obviamente, podría usar JavaScript y expresiones regulares para analizar location.search
, pero ir a ese nivel bajo para algo tan básico realmente ofende la sensibilidad de mi programador.
Entonces: ¿hay una mejor manera de usar $location
que yo en mi respuesta, o hay una alternativa concisa?
http://127.0.0.1:8080/test.html#?target=bob
funcionaría, observe el #
antes de la ?
. $location
es un método de enrutamiento de segundo nivel que no se envía al servidor.
$location.search()['target']
funciona después de $locationProvider.html5Mode(true)
haber sido llamado en un navegador moderno.