Mi aplicación AngularJS necesita tener acceso al perfil de usuario de LinkedIn. Para hacer eso, necesito redirigir al usuario a una URL de LinkedIn que contiene un parámetro de devolución de llamada redirect_uri que le indicará a LinkedIn que redirija al usuario de nuevo a mi aplicación web e incluya un parámetro de consulta de "código" en la URL. Es un flujo tradicional de Oauth 2.0.
Todo funciona muy bien, excepto que LinkedIn redirige al usuario a la siguiente URL:
http://localhost:8080/?code=XXX&state=YYY#/users/123/providers/LinkedIn/social-sites
Me gustaría eliminar ?code=XXX&state=YYY
de la URL para que quede limpia. El usuario no necesita ver los parámetros de consulta que recibí de la redirección de LinkedIn.
Lo intenté $location.absUrl($location.path() + $location.hash()).replace()
, pero mantiene los parámetros de consulta en la URL.
Tampoco puedo extraer los parámetros de consulta, por ejemplo, "código", usando ($location.search()).code
. Parece que tiene? antes de # en la URL anterior está engañando a Angular.
Terminé recibiendo la respuesta del foro AngularJS. Ver este hilo para más detalles
El enlace es a un hilo de Grupos de Google, que es difícil de leer y no proporciona una respuesta clara. Para eliminar los parámetros de URL use
fuente
The link is to a Google Groups thread, which is difficult to read and doesn't provide a clear answer
Para eliminar TODOS los parámetros de consulta, haga:
Para eliminar UN parámetro de consulta particular, haga:
fuente
undefined
, en caso de que estés evitando usarnull
como soy.Para borrar un elemento, bórrelo y llame a $$ compose
derivado de la fuente angularjs: https://github.com/angular/angular.js/blob/c77b2bcca36cf199478b8fb651972a1f650f646b/src/ng/location.js#L419-L443
fuente
search
método. docs.angularjs.org/api/ng/service/$location#searchPuede eliminar un parámetro de consulta específico utilizando:
O puede borrar todos los parámetros de consulta configurando la búsqueda en un objeto vacío:
fuente
$location.$$search = {}
se ejecuta). La solución @basarat funciona bien.En el momento de la escritura, y como se mencionó anteriormente por @Bosh,
html5mode
debe estartrue
en orden para poder configurarlo$location.search()
y que se refleje de nuevo en la URL visual de la ventana.Consulte https://github.com/angular/angular.js/issues/1521 para obtener más información.
Pero si
html5mode
estrue
así, puede borrar fácilmente la cadena de consulta de la URL con:o
Esto también alterará la URL visual de la ventana.
(Probado en la versión AngularJS
1.3.0-rc.1
conhtml5Mode(true)
.)fuente
¿Necesita hacer que funcione cuando
html5mode
=false
?Todas las otras respuestas funcionan solo cuando Angular
html5mode
estrue
. Si está trabajando fuera dehtml5mode
, entonces se$location
refiere solo a la ubicación "falsa" que vive en su hash, por$location.search
lo que no puede ver / editar / corregir los parámetros de búsqueda de la página real.Aquí hay una solución alternativa, que se insertará en el HTML de la página antes de las cargas angulares:
fuente
myapp/#?client=clientName
lugar demyapp/?client=clientName
Solo usa
En vez de
fuente
Si desea pasar a otra URL y borrar los parámetros de consulta, simplemente use:
fuente
Si está utilizando parámetros de rutas, simplemente borre $ routeParams
fuente
$routeParams
ennull
. En realidad, no afectará a los parámetros de URL en la barra de direcciones.¿Qué tal simplemente establecer el hash de ubicación en nulo?
fuente
Si procesa los parámetros inmediatamente y luego pasa a la página siguiente, puede colocar un signo de interrogación al final de la nueva ubicación.
por ejemplo, si hubiera hecho $ location.path ('/ nextPage');
puede hacer esto en su lugar: $ location.path ('/ nextPage?');
fuente
He intentado las respuestas anteriores pero no pude hacer que funcionen. El único código que funcionó para mí fue
$window.location.search = ''
fuente
Puedo reemplazar todos los parámetros de consulta con esta única línea:
$location.search({});
fácil de entender y una forma fácil de borrarlos.
fuente
La respuesta aceptada funcionó para mí, pero necesitaba profundizar un poco más para solucionar los problemas con el botón Atrás.
Lo que noté es que si enlazo a una página usando
<a ui-sref="page({x: 1})">
, luego elimino la cadena de consulta usando$location.search('x', null)
, no obtengo una entrada adicional en el historial de mi navegador, por lo que el botón Atrás me lleva de regreso a donde comencé. Aunque siento que esto está mal porque no creo que Angular deba eliminar automáticamente esta entrada del historial, este es realmente el comportamiento deseado para mi caso de uso particular.El problema es que si me enlace a la página utilizando
<a href="https://stackoverflow.com/page/?x=1">
en su lugar, a continuación, quitar la cadena de consulta de la misma manera, yo hago conseguir una entrada extra en mi historial del navegador, por lo que tengo que hacer clic en el botón Atrás dos veces para volver al punto de partida . Este es un comportamiento inconsistente, pero en realidad esto parece más correcto.Puedo solucionar fácilmente el problema con los
href
enlaces mediante el uso$location.search('x', null).replace()
, pero esto rompe la página cuando aterrizas a través de unui-sref
enlace, por lo que esto no es bueno.Después de mucho juguetear, esta es la solución que se me ocurrió:
En la
run
función de mi aplicación, agregué esto:Luego uso este código para eliminar el parámetro de cadena de consulta:
fuente
Para Angular> 2 , puede pasar nulo a todos los parámetros que desea borrar
fuente