Umleiten mit AngularJS


86

Ich versuche, auf eine andere Route umzuleiten, indem ich:

$location.path("/route");

Aber aus irgendeinem Grund funktioniert es nicht. Ich habe ein Widget mit automatischer Vervollständigung unter Verwendung von jQuery-UI erstellt und rufe eine Funktion aus dem Bereich auf, sobald der Benutzer eine Option ausgewählt hat. Ich habe es debuggt und es tritt in die Funktion ein, aber es wird nie auf die andere Route umgeleitet. Es ändert die Route nur, wenn ich eine Taste drücke.

Ich finde es irgendwie seltsam, aber ich habe nicht herausgefunden, wie ich das lösen soll. ich benutzte

window.location = "#/route";

und es funktioniert, aber ich möchte die path()Funktion verwenden.

Hat jemand eine Idee, warum das passiert?

Antworten:


109

Mit einem Beispiel für den nicht funktionierenden Code wird es einfach sein, diese Frage zu beantworten, aber mit diesen Informationen ist das Beste, was ich denken kann, dass Sie den $ location.path außerhalb des AngularJS-Digests aufrufen.

Versuchen Sie dies anhand der Richtlinie scope.$apply(function() { $location.path("/route"); });


Vielen Dank und es tut mir leid, dass ich das nicht funktionierende Beispiel nicht veröffentlicht habe. Aber genau das brauchte mein Code.
Tomarto

23
Haben Sie eine Idee, wie dies mit der .success-Methode in einer $ http-Anfrage funktioniert? @ Tomarto
Nicholas Kreidberg

2
auf Firefox (30 ~) Konsole
löst

1
Wie soll das funktionieren? Ich erhalte die folgende Fehlermeldung: Fehler: [$ rootScope: inprog] $ gelten bereits im Gange errors.angularjs.org/1.2.15/$rootScope/inprog?p0=%24apply bei Angularjs: 78 ..... Daher funktioniert es nicht als windows.location = '' ..
Vaibhav

1
@NicholasKreidberg hatte die gleiche Frage und fügte nur $ scope hinzu. $ Apply (); kurz nach $ location.path ("/ route"); arbeitete für mich.
Ernesto Allely

82

Vergessen Sie nicht, $locationin den Controller einzuspritzen .


2
Schöner Fang - das war das Problem für mich.
Jason Swett

Schön, danke, dass du das gepostet hast, was so offensichtlich schien, war es nicht.
Chuck Conway

20

Angenommen, Sie verwenden kein HTML5-Routing, versuchen Sie es $location.path("route"). Dadurch wird Ihr Browser auf #/routeden gewünschten Browser umgeleitet .


15

Wenn Sie aus Ihrer eckigen Anwendung umleiten müssen, verwenden Sie $window.location. Das war mein Fall; hoffentlich findet es jemand nützlich.


2

Überprüfen Sie Ihre Routing-Methode:

wenn Ihr Routing-Status so ist

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

dann solltest du verwenden

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

0

Es ist schwer zu sagen, ohne Ihren Code zu kennen. Ich gehe davon aus, dass das onchangeEreignis nicht ausgelöst wird, wenn Sie Ihren Textfeldwert aus JavaScript-Code ändern.

Es gibt zwei Möglichkeiten, wie dies funktioniert. Das erste ist, selbst anzurufen onchange, und das zweite ist, darauf zu warten, dass das Textfeld den Fokus verliert.

Überprüfen Sie diese Frage ; gleiches Problem, anderer Rahmen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.