La aplicación en la que estoy trabajando contiene varios estados (usando ui-router), donde algunos estados requieren que inicies sesión, otros están disponibles públicamente.
He creado un método que verifica válidamente si un usuario está conectado, con lo que tengo problemas actualmente es redirigir a nuestra página de inicio de sesión cuando sea necesario. Cabe señalar que la página de inicio de sesión no se encuentra actualmente dentro de la aplicación 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");
}
});
});
Console.log muestra la URL deseada correctamente. La línea posterior a eso, he intentado prácticamente todo, desde $ window.open a window.location.href y no importa lo que haya intentado, no ocurre ninguna redirección.
EDITAR (RESUELTO):
Encontré el problema.
var landingUrl = $window.location.host + "/login";
$window.open(landingUrl, "_self");
La variable landingUrl se configuró en 'domain.com/login', que no funcionaría con $ window.location.href (que fue una de las cosas que probé). Sin embargo, después de cambiar el código a
var landingUrl = "http://" + $window.location.host + "/login";
$window.location.href = landingUrl;
ahora funciona.
fuente
location
objeto nativo usando$window.location=...
Respuestas:
Creo que la forma de hacer esto es
$location.url('/RouteTo/Login');
Editar para mayor claridad
Digamos que mi ruta para mi vista de inicio de sesión era
/Login
, yo diría$location.url('/Login')
que navegara a esa ruta.Para ubicaciones fuera de la aplicación Angular (es decir, sin ruta definida), el JavaScript antiguo simple servirá:
window.location = "http://www.my-domain.com/login"
fuente
$window
lugar dewindow
(fuente: stackoverflow.com/questions/28906180/… )Parece que para la recarga de página completa
$window.location.href
es la forma preferida.https://docs.angularjs.org/guide/$location
fuente
¡Podría ayudarte! manifestación
Ejemplo de código 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; }; });
Ejemplo de código HTML
<div ng-app="urlApp"> <div ng-controller="urlCtrl"> Redirect to <a href="#" ng-click="ClickMeToRedirect()">Click Me!</a> </div> </div>
fuente
No estoy seguro de qué versión, pero yo uso 1.3.14 y puedes usar:
window.location.href = '/employee/1';
No es necesario inyectar
$location
ni$window
en el controlador y no es necesario obtener la dirección de host actual.fuente
Tienes que poner:
< html ng-app = "urlApp" ng-controller = "urlCtrl">
De esta manera la función angular puede acceder al objeto "ventana"
fuente