AngularJS - ¿Cómo puedo hacer una redirección con una carga de página completa?

94

Quiero hacer una redirección que recargue la página completa para que las cookies de mi servidor web se actualicen cuando se cargue la página. window.location = "/#/Next"y window.location.href = "/#/Next"no funcionan, hacen una ruta angular que no llega al servidor.

¿Cuál es la forma correcta de realizar una solicitud de servidor completa dentro de un controlador angular?

Mike Pateras
fuente
8
alguna vez resolviste esto?
superjos
7
alguna vez resolviste esto?
Nolwennig
6
alguna vez resolviste esto?
Dan Beaulieu
5
alguna vez resolviste esto?
My Stack Overfloweth
4
alguna vez resolviste esto?
Shahzain Ali,

Respuestas:

183

Para <a>etiquetas :

Necesitas pegar target="_self"tu <a>etiqueta

Hay tres casos en los que AngularJS realizará una recarga de página completa:

  • Enlaces que contienen el elemento de destino
    Ejemplo:<a href="https://stackoverflow.com/ext/link?a=b" target="_self">link</a>
  • Enlaces absolutos que van a un dominio diferente
    Ejemplo:<a href="http://angularjs.org/">link</a>
  • Enlaces que comienzan con '/' que conducen a una ruta base diferente cuando se define la base
    Ejemplo:<a href="https://stackoverflow.com/not-my-base/link">link</a>

Usando javascript :

El $locationservicio le permite cambiar solo la URL; no le permite volver a cargar la página. Cuando tenga que cambiar la URL y vuelva a cargar la página o navegar a una página diferente, por favor utilice una API de nivel inferior: $window.location.href.

Ver:

jszobody
fuente
15
$ window.location.href hace lo mismo que window.location.href. Estoy bastante seguro de que $ window es solo un servicio de envoltura para window. De cualquier manera, ambos hacen una ruta angular en lugar de actualizar la página completa.
Mike Pateras
3
$ window.location.href definitivamente provoca una actualización de página completa, lo estoy haciendo en mi aplicación.
jszobody
3
He leído lo mismo. No funciona en la versión actual de Chrome. Hace una ruta Angular.
Mike Pateras
1
1.0.6 de la CDN. Estoy haciendo esto dentro de una devolución de llamada exitosa $ http.post, si eso importa, aunque lo he probado fuera de la devolución de llamada y obtuve los mismos resultados. Si hago la redirección a "/" (para la que también tengo definida una ruta angular), funciona con la actualización de página completa, pero "/ # / Siguiente" simplemente cambia la vista.
Mike Pateras
5
<a href="..." target="_self">es lo que funcionó para mí. Gracias !
Michael
33

Tuvimos el mismo problema, trabajando desde código JS (es decir, no desde HTML anchor). Así es como solucionamos eso:

  1. Si es necesario, modifique virtualmente la URL actual a través del $locationservicio. Esto puede resultar útil si su destino es solo una variación de la URL actual, para que pueda aprovechar los $locationmétodos auxiliares. Por ejemplo, corrimos $location.search(..., ...)para cambiar el valor de un parámetro de cadena de consulta.

  2. Cree la nueva URL de destino, utilizando la actual $location.url()si es necesario. Para funcionar, este nuevo tenía que incluir todo después del esquema, el dominio y el puerto. Entonces, por ejemplo, si desea mudarse a:

    http://yourdomain.com/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en

    entonces debes configurar la URL como en:

    var destinationUrl = '/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en';

    (con el protagonista '/'también).

  3. Asignar una nueva URL de destino a bajo nivel :$window.location.href = destinationUrl;

  4. Recarga forzada, todavía a bajo nivel: $window.location.reload();

superjos
fuente
1
Esto no me funciona en Angular 1.3.1 con Chrome 38. El valor de $ window.location.href no cambia cuando asigno una ruta o una URL completa. Solo $ window.location.assign () funcionó para mí.
FelixM
Al tener los mismos problemas que Felix, lo resolvió de una manera diferente stackoverflow.com/questions/31137809/…
Soroush Hakami
13

Después de buscar y dar una sesión de prueba y prueba, puedo hacerlo solo especificando primero la URL como

$window.location.href = '/#/home/stats';

luego recarga

$window.location.reload();
Daniyal
fuente
Esto parece solucionar el problema, pero hacer clic hacia atrás y hacia adelante en el navegador provocará muchas inconsistencias.
luisluix
9

Tuve el mismo problema. Cuando lo uso window.location, $window.locationni siquiera <a href="..." target="_self">la ruta actualiza la página. Entonces se usan los servicios en caché, que no es lo que quiero en mi aplicación. Lo resolví agregando window.location.reload()after window.locationpara obligar a que la página se recargue después del enrutamiento. Sin embargo, este método parece cargar la página dos veces. Podría ser un truco sucio, pero funciona. Así es como lo tengo ahora:

  $scope.openPage = function (pageName) {
      window.location = '#/html/pages/' + pageName;
      window.location.reload();
  };
Neel
fuente
1

Prueba esto

$window.location.href="#page-name";
$window.location.reload();
Suresh Maurya
fuente