Usando $ window ou $ location para redirect no AngularJS

O aplicativo em que estou trabalhando contém vários estados (usando o ui-router), em que alguns estados exigem que você faça o login, outros estão disponíveis publicamente.

Eu criei um método que validamente verifica se um usuário está logado, o que eu estou atualmente tendo problemas é realmente redirecionando para nossa página de login quando necessário. Deve-se notar que a página de login não está atualmente colocada dentro do aplicativo 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"); } }); }); 

O console.log mostra o URL pretendido corretamente. A linha depois disso, eu tentei praticamente tudo de $ window.open para window.location.href e não importa o que eu tentei nenhum redirecionamento acontece.

EDITAR (RESOLVIDO):

Encontrou o problema.

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

A variável landingUrl foi definida como ‘domain.com/login’, o que não funcionaria com $ window.location.href (que foi uma das coisas que tentei). No entanto, depois de alterar o código para

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

agora funciona.

Eu acredito que a maneira de fazer isso é $location.url('/RouteTo/Login');

Editar para clareza

Digamos que minha rota para minha visualização de login fosse /Login , eu diria $location.url('/Login') para navegar para essa rota.

Para locais fora do aplicativo Angular (ou seja, nenhuma rota definida), o JavaScript antigo simples servirá:

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

Parece que para recarregar a página inteira $window.location.href é o caminho preferido.

Não causa um recarregamento total da página quando o URL do navegador é alterado. Para recarregar a página depois de alterar o URL, use a API de nível inferior, $ window.location.href.

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

Isso pode te ajudar! demonstração

Amostra de código do 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; }; }); 

Amostra de código HTML

 
Redirect to Click Me!

Não tenho certeza de qual versão, mas eu uso 1.3.14 e você pode simplesmente usar:

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

Não é necessário injetar $location ou $window no controlador e não é necessário obter o endereço do host atual.

Você tem que colocar:

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

Desta forma, a function angular pode acessar o object “window”