Usando $ window o $ location to Redirect in AngularJS

L’app su cui sto lavorando contiene vari stati (usando ui-router), in cui alcuni stati richiedono l’accesso, altri sono disponibili al pubblico.

Ho creato un metodo che controlla validamente se un utente ha effettuato l’accesso, quello che attualmente sto riscontrando è in realtà reindirizzato alla nostra pagina di accesso quando necessario. Va notato che la pagina di accesso non è attualmente inserita nell’app AngularJS.

app.run(function ($rootScope, $location, $window) { $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) { if (toState.data.loginReq && !$rootScope.me.loggedIn) { var landingUrl = $window.location.host + "/login"; console.log(landingUrl); $window.open(landingUrl, "_self"); } }); }); 

Il file console.log mostra correttamente l’URL desiderato. La linea dopo, ho provato praticamente tutto da $ window.open a window.location.href e non importa cosa ho provato, nessun redirect accade.

MODIFICA (RISOLTO):

Trovato il problema.

 var landingUrl = $window.location.host + "/login"; $window.open(landingUrl, "_self"); 

La variabile landingUrl era impostata su ‘dominio.com/login’, che non funzionava con $ window.location.href (che era una delle cose che ho provato). Tuttavia dopo aver cambiato il codice in

 var landingUrl = "http://" + $window.location.host + "/login"; $window.location.href = landingUrl; 

ora funziona.

Credo che il modo per farlo sia $location.url('/RouteTo/Login');

Modifica per chiarezza

Dire che il mio percorso per la mia vista di accesso era /Login , direi $location.url('/Login') per navigare su quella rotta.

Per le posizioni esterne all’app Angular (ovvero nessuna route definita), verrà utilizzato il semplice JavaScript vecchio:

 window.location = "http://www.my-domain.com/login" 

Sembra che per il caricamento della pagina completa $window.location.href sia il modo preferito.

Non provoca il ricaricamento di una pagina intera quando viene modificato l’URL del browser. Per ricaricare la pagina dopo aver modificato l’URL, utilizzare l’API di livello inferiore, $ window.location.href.

https://docs.angularjs.org/guide/$location

Potrebbe aiutarti! dimostrazione

Esempio di codice AngularJs

 var app = angular.module('urlApp', []); app.controller('urlCtrl', function ($scope, $log, $window) { $scope.ClickMeToRedirect = function () { var url = "http://" + $window.location.host + "/Account/Login"; $log.log(url); $window.location.href = url; }; }); 

Esempio di codice HTML

 
Redirect to Click Me!

Non sono sicuro di quale versione, ma io uso 1.3.14 e puoi semplicemente usare:

 window.location.href = '/employee/1'; 

Non è necessario iniettare $location o $window nel controller e non è necessario ottenere l’indirizzo host corrente.

Devi mettere:

< html ng-app = “urlApp” ng-controller = “urlCtrl”>

In questo modo la funzione angular può accedere all’object “finestra”