Redirection à l'aide d'AngularJS


86

J'essaye de rediriger vers une autre route en utilisant:

$location.path("/route");

Mais pour une raison quelconque, cela ne fonctionne pas. J'ai créé un widget de saisie semi-automatique à l'aide de jQuery-UI et j'appelle une fonction à partir de la portée une fois que l'utilisateur sélectionne une option. Je l'ai débogué et il entre dans la fonction mais il n'est jamais redirigé vers l'autre route. Cela ne change l'itinéraire que lorsque j'appuie sur une touche.

Je pense que c'est un peu étrange mais je n'ai pas trouvé comment résoudre ce problème. j'ai utilisé

window.location = "#/route";

et ça marche mais je veux utiliser la path()fonction.

Quelqu'un a-t-il une idée de pourquoi cela se produit?

Réponses:


109

Avec un exemple de code qui ne fonctionne pas, il sera facile de répondre à cette question, mais avec cette information, le mieux que je puisse penser est que vous appelez le $ location.path en dehors du condensé AngularJS.

Essayez de faire cela sur la directive scope.$apply(function() { $location.path("/route"); });


Merci beaucoup et je suis désolé de ne pas avoir publié l'exemple qui ne fonctionne pas. Mais c'était ce dont mon code avait besoin.
Tomarto

23
Une idée comment faire fonctionner cela dans la méthode .success à l'intérieur d'une requête $ http? @Tomarto
Nicholas Kreidberg

2
sur la console firefox (30 ~) déclenche une erreur indiquant que $ apply cycle est occupé
svarog

1
Comment cela fonctionne-t-il? J'obtiens l'erreur suivante: Erreur: [$ rootScope: inprog] $ s'applique déjà en cours errors.angularjs.org/1.2.15/$rootScope/inprog?p0=%24apply à angular.js: 78 ..... par conséquent, il ne fonctionne pas comme windows.location = '' ..
Vaibhav

1
@NicholasKreidberg avait la même question et ajoutait simplement $ scope. $ Apply (); juste après $ location.path ("/ route"); travaillé pour moi.
Ernesto Allely

82

N'oubliez pas d'injecter $locationdans le contrôleur.


2
Belle prise - c'était le problème pour moi.
Jason Swett

Belle, merci d'avoir posté ceci, ce qui semblait si évident ne l'était pas.
Chuck Conway

20

En supposant que vous n'utilisez pas le routage html5, essayez $location.path("route"). Cela redirigera votre navigateur vers #/routelequel pourrait être ce que vous voulez.


15

Si vous avez besoin de rediriger hors de votre application angulaire, utilisez $window.location. C'était mon cas; j'espère que quelqu'un le trouvera utile.


2

Vérifiez votre méthode de routage:

si votre état de routage est comme ça

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

alors vous devriez utiliser

$location.path("/app/register");

0

C'est difficile à dire sans connaître votre code. Ma meilleure supposition est que l' onchangeévénement ne se déclenche pas lorsque vous modifiez la valeur de votre zone de texte à partir du code JavaScript.

Il y a deux façons pour cela de fonctionner; la première consiste à appeler onchangepar vous-même et la seconde à attendre que la zone de texte perde le focus.

Vérifiez cette question ; même problème, cadre différent.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.