Reindirizza utilizzando AngularJS


86

Sto cercando di reindirizzare a un altro percorso utilizzando:

$location.path("/route");

Ma per qualche motivo non funziona. Ho creato un widget di completamento automatico utilizzando jQuery-UI e sto chiamando una funzione dall'ambito una volta che l'utente seleziona un'opzione. Ho eseguito il debug ed entra nella funzione ma non viene mai reindirizzato all'altro percorso. Cambia il percorso solo quando premo un tasto.

Penso che sia un po 'strano ma non ho capito come risolverlo. ero solito

window.location = "#/route";

e funziona ma voglio usare la path()funzione.

Qualcuno ha idea del perché sta succedendo?

Risposte:


109

Con un esempio del codice non funzionante, sarà facile rispondere a questa domanda, ma con queste informazioni il meglio che posso pensare è che stai chiamando $ location.path al di fuori del digest di AngularJS.

Prova a farlo sulla direttiva scope.$apply(function() { $location.path("/route"); });


Grazie mille e mi dispiace per non aver pubblicato l'esempio non funzionante. Ma questo era ciò di cui aveva bisogno il mio codice.
Tomarto

23
Qualche idea su come farlo funzionare nel metodo .success all'interno di una richiesta $ http? @Tomarto
Nicholas Kreidberg

2
sulla console firefox (30 ~) viene generato un errore che indica che il ciclo di $ apply è occupato
svarog

1
Come dovrebbe funzionare? Ricevo il seguente errore: Errore: [$ rootScope: inprog] $ apply già in corso errors.angularjs.org/1.2.15/$rootScope/inprog?p0=%24apply at angular.js: 78 ..... quindi, non funziona come windows.location = '' ..
Vaibhav

1
@NicholasKreidberg aveva la stessa domanda e ha semplicemente aggiunto $ scope. $ Apply (); subito dopo $ location.path ("/ route"); ha funzionato per me.
Ernesto Allely

82

Non dimenticare di iniettare $locationnel controller.


2
Bella presa: questo era il problema per me.
Jason Swett

Bello, grazie per aver postato questo, ciò che sembrava così ovvio non lo era.
Chuck Conway

20

Supponendo che tu non stia utilizzando il routing html5, prova $location.path("route"). Questo reindirizzerà il tuo browser a quello #/routeche potrebbe essere quello che desideri.


15

Se hai bisogno di reindirizzare dalla tua applicazione angolare usa $window.location. Quello era il mio caso; si spera che qualcuno lo trovi utile.


2

Controlla il tuo metodo di calcolo del percorso:

se il tuo stato di instradamento è come questo

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

allora dovresti usare

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

0

È difficile dirlo senza conoscere il tuo codice. La mia ipotesi migliore è che l' onchangeevento non si attivi quando modifichi il valore della casella di testo dal codice JavaScript.

Ci sono due modi per farlo funzionare; il primo è chiamare onchangeda soli e il secondo è aspettare che la casella di testo perda il focus.

Controlla questa domanda ; stesso problema, quadro diverso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.