O aplicativo no qual estou trabalhando contém vários estados (usando ui-router), em que alguns estados exigem que você esteja conectado, outros estão disponíveis publicamente.
Eu criei um método que verifica validamente se um usuário está logado, o que estou tendo problemas atualmente é redirecionar para nossa página de login quando necessário. Deve-se observar que a página de login não está colocada no 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. Na linha seguinte, tentei praticamente tudo, de $ window.open a 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, após alterar o código para
var landingUrl = "http://" + $window.location.host + "/login";
$window.location.href = landingUrl;
agora funciona.
fonte
location
objeto nativo usando$window.location=...
Respostas:
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 foi
/Login
, eu diria$location.url('/Login')
para navegar até essa rota.Para locais fora do aplicativo Angular (ou seja, nenhuma rota definida), o JavaScript simples servirá:
fonte
$window
vez dewindow
(fonte: stackoverflow.com/questions/28906180/… )Parece que recarregar a página inteira
$window.location.href
é a forma preferida.https://docs.angularjs.org/guide/$location
fonte
Isso pode te ajudar! demo
Amostra de código AngularJs
Amostra de código HTML
fonte
Não tenho certeza de qual versão, mas eu uso 1.3.14 e você pode apenas usar:
Não há necessidade de injetar
$location
ou$window
no controlador e não há necessidade de obter o endereço do host atual.fonte
Você tem que colocar:
< html ng-app = "urlApp" ng-controller = "urlCtrl">
Desta forma, a função angular pode acessar o objeto "janela"
fonte