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?

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"); });


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


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.


15

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


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");

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.