Redirigir usando AngularJS

86

Estoy tratando de redirigir a otra ruta usando:

$location.path("/route");

Pero por alguna razón no funciona. Hice un widget de autocompletar usando jQuery-UI y estoy llamando a una función desde el alcance una vez que el usuario selecciona una opción. Lo depuré y entra en la función pero nunca se redirige a la otra ruta. Solo cambia la ruta cuando presiono una tecla.

Creo que es un poco extraño, pero no he descubierto cómo solucionarlo. solía

window.location = "#/route";

y funciona pero quiero usar la path()función.

¿Alguien tiene alguna idea de por qué está sucediendo esto?

Tomarto
fuente

Respuestas:

109

Con un ejemplo del código que no funciona, será fácil responder esta pregunta, pero con esta información, lo mejor que puedo pensar es que está llamando a $ location.path fuera del resumen de AngularJS.

Intente hacer esto en la directiva scope.$apply(function() { $location.path("/route"); });

Renan Tomal Fernandes
fuente
Muchas gracias y lamento no publicar el ejemplo que no funciona. Pero esto era lo que necesitaba mi código.
Tomarto
23
¿Alguna idea de cómo hacer que esto funcione en el método .success dentro de una solicitud $ http? @Tomarto
Nicholas Kreidberg
2
en firefox (30 ~), la consola dispara un error que
indica que el
1
¿Cómo se supone que esto funcione? Recibo el siguiente error: Error: [$ rootScope: inprog] $ aplicar ya en progreso errors.angularjs.org/1.2.15/$rootScope/inprog?p0=%24apply en angular.js: 78 ..... por lo tanto, no funciona como windows.location = '' ..
Vaibhav
1
@NicholasKreidberg tenía la misma pregunta y solo agregó $ scope. $ Apply (); justo después de $ location.path ("/ route"); trabajó para mi.
Ernesto Allely
82

No olvide inyectar $locationen el controlador.

Stepan Suvorov
fuente
2
Buen partido, ese fue el problema para mí.
Jason Swett
Agradable, gracias por publicar esto, lo que parecía tan obvio no lo era.
Chuck Conway
20

Suponiendo que no está utilizando el enrutamiento html5, intente $location.path("route"). Esto redirigirá su navegador a lo #/routeque podría ser lo que desea.

dpactri
fuente
15

Si necesita redirigir fuera de su aplicación angular, use $window.location. Ese fue mi caso; con suerte, alguien lo encontrará útil.

Raulucco
fuente
2

Verifique su método de enrutamiento:

si su estado de enrutamiento es así

 .state('app.register', {
    url: '/register',
    views: {
      'menuContent': {
        templateUrl: 'templates/register.html',
      }
    }
  }) 

entonces deberías usar

$location.path("/app/register");
jfindley
fuente
0

Es difícil de decir sin conocer su código. Mi mejor suposición es que el onchangeevento no se activa cuando cambia el valor del cuadro de texto del código JavaScript.

Hay dos formas de que esto funcione; la primera es llamar onchangeusted mismo y la segunda es esperar a que el cuadro de texto pierda el foco.

Marque esta pregunta ; mismo tema, marco diferente.

Milán Jaric
fuente