Использование $window или $location для перенаправления в AngularJS
Приложение, над которым я работаю, содержит различные состояния (используя ui-router), где некоторые штаты требуют, чтобы вы вошли в систему, другие доступны для общественности.
Я создал метод, который корректно проверяет, вошел ли пользователь в систему, что у меня в настоящее время возникают проблемы, на самом деле перенаправляется на нашу страницу входа в систему, когда это необходимо. Следует отметить, что в настоящее время страница входа в систему не размещена в приложении 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");
}
});
});
Консоль .log правильно отображает предполагаемый URL-адрес. После этой строки я попытался практически все: от $window.open до window.location.href и независимо от того, что я пробовал, не происходит перенаправления.
EDIT (RESOLVED):
Обнаружена проблема.
var landingUrl = $window.location.host + "/login";
$window.open(landingUrl, "_self");
У переменной landingUrl установлено значение "domain.com/login", которое не работает с
$ window.location.href(это была одна из вещей, которые я пробовал). Однако после изменения кода на
var landingUrl = "http://" + $window.location.host + "/login";
$window.location.href = landingUrl;
теперь он работает.
Ответы
Ответ 1
Я считаю, что способ сделать это - $location.url('/RouteTo/Login');
Изменить для ясности
Скажите, что мой маршрут для моего режима просмотра был /Login
, я бы сказал $location.url('/Login')
, чтобы перейти к этому маршруту.
Для местоположений вне приложения Angular (т.е. определенного маршрута) обычный старый JavaScript будет сервером:
window.location = "http://www.domain.com/login"
Ответ 2
Кажется, что для полной загрузки страницы $window.location.href
является предпочтительным способом.
Это не приводит к полной перезагрузке страницы при изменении URL-адреса браузера. Чтобы перезагрузить страницу после изменения URL-адреса, используйте API нижнего уровня, $window.location.href.
https://docs.angularjs.org/guide/$location
Ответ 3
Это может помочь вам! демо
Образец кода 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;
};
});
Код HTML-кода
<div ng-app="urlApp">
<div ng-controller="urlCtrl">
Redirect to <a href="#" ng-click="ClickMeToRedirect()">Click Me!</a>
</div>
</div>
Ответ 4
Не знаю, из какой версии, но я использую 1.3.14, и вы можете просто использовать:
window.location.href = '/employee/1';
Не нужно вводить $location
или $window
в контроллер и не нужно получать текущий адрес хоста.
Ответ 5
Вы должны поставить:
< html ng-app = "urlApp" ng-controller = "urlCtrl" >
Таким образом, функция angular может получить доступ к объекту "window"