AngularJS - Come posso fare un reindirizzamento con un caricamento di una pagina intera?


94

Voglio fare un reindirizzamento che fa ricaricare l'intera pagina in modo che i cookie dal mio server web vengano aggiornati quando la pagina viene caricata. window.location = "/#/Next"e window.location.href = "/#/Next"non funzionano, fanno un percorso angolare che non colpisce il server.

Qual è il modo corretto per effettuare una richiesta server completa all'interno di un controller Angular?


8
l'hai mai risolto?
superjos

7
l'hai mai risolto?
Nolwennig

6
l'hai mai risolto?
Dan Beaulieu,

5
l'hai mai risolto?
mio stack trabocca il

4
l'hai mai risolto?
shahzain ali

Risposte:


183

Per i <a>tag :

Devi attaccare target="_self"il tuo <a>tag

Ci sono tre casi in cui AngularJS eseguirà un ricaricamento della pagina intera:

  • Collegamenti che contengono l'elemento di destinazione
    Esempio:<a href="https://stackoverflow.com/ext/link?a=b" target="_self">link</a>
  • Collegamenti assoluti che vanno a un dominio diverso
    Esempio:<a href="http://angularjs.org/">link</a>
  • Collegamenti che iniziano con "/" che portano a un percorso di base diverso quando viene definita base
    Esempio:<a href="https://stackoverflow.com/not-my-base/link">link</a>

Utilizzando javascript :

Il $locationservizio ti consente di modificare solo l'URL; non ti permette di ricaricare la pagina. Quando è necessario modificare l'URL e ricaricare la pagina o passare a una pagina diversa, si prega di utilizzare un'API di livello inferiore: $window.location.href.

Vedere:


15
$ window.location.href fa la stessa cosa che fa window.location.href. Sono abbastanza sicuro che $ window sia solo un servizio di wrapping per window. In ogni caso, entrambi eseguono un percorso angolare invece dell'aggiornamento della pagina intera.
Mike Pateras

3
$ window.location.href provoca sicuramente un aggiornamento completo della pagina, lo sto facendo nella mia app.
jszobody

3
Ho letto la stessa cosa. Non funziona nella versione corrente di Chrome. Fa un percorso angolare.
Mike Pateras

1
1.0.6 dal CDN. Lo sto facendo all'interno di un callback di successo $ http.post, se è importante, anche se l'ho provato al di fuori della richiamata e ho ottenuto gli stessi risultati. Se eseguo il reindirizzamento a "/" (per il quale ho definito anche un percorso angolare), funziona con l'aggiornamento della pagina intera, ma "/ # / Next" cambia solo la vista.
Mike Pateras

5
<a href="..." target="_self">è quello che ha funzionato per me. Grazie !
Michael

33

Abbiamo avuto lo stesso problema, lavorando dal codice JS (cioè non dall'ancoraggio HTML). Ecco come l'abbiamo risolto:

  1. Se necessario, modifica virtualmente l'URL corrente tramite il $locationservizio. Ciò potrebbe essere utile se la tua destinazione è solo una variazione dell'URL corrente, in modo da poter sfruttare i $locationmetodi di supporto. Ad esempio, siamo corsi $location.search(..., ...)a cambiare solo il valore di un parametro stringa di query.

  2. Crea il nuovo URL di destinazione, utilizzando quello corrente $location.url()se necessario. Per funzionare, questo nuovo doveva includere tutto dopo schema, dominio e porta. Quindi, ad esempio, se vuoi passare a:

    http://yourdomain.com/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en

    quindi dovresti impostare l'URL come in:

    var destinationUrl = '/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en';

    (anche con il protagonista '/').

  3. Assegna un nuovo URL di destinazione a basso livello :$window.location.href = destinationUrl;

  4. Ricarica forzata, sempre a livello basso: $window.location.reload();


1
Questo non funziona per me in Angular 1.3.1 con Chrome 38. Il valore di $ window.location.href non cambia quando assegno un percorso o un URL completo. Solo $ window.location.assign () ha funzionato per me.
FelixM

Avendo gli stessi problemi come Felix, risolto in modo diverso stackoverflow.com/questions/31137809/...
Soroush Hakami

13

Dopo aver cercato e dato una sessione di hit e di prova, sono in grado di eseguirlo in solo specificando prima l'URL come

$window.location.href = '/#/home/stats';

quindi ricaricare

$window.location.reload();

Questo sembra risolvere il problema, ma fare clic su avanti e indietro nel browser causerà molte incongruenze.
luisluix

9

Ho avuto lo stesso problema. Quando lo uso window.location, $window.locationo anche <a href="..." target="_self">il percorso non aggiorna la pagina. Quindi vengono utilizzati i servizi memorizzati nella cache, che non è quello che voglio nella mia app. L'ho risolto aggiungendo window.location.reload()dopo window.locationper forzare il ricaricamento della pagina dopo il routing. Questo metodo sembra però caricare la pagina due volte. Potrebbe essere un trucco sporco, ma funziona. Ecco come ce l'ho ora:

  $scope.openPage = function (pageName) {
      window.location = '#/html/pages/' + pageName;
      window.location.reload();
  };

1

Prova questo

$window.location.href="#page-name";
$window.location.reload();
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.