Использование $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");
}
});
});
консоли.журнал показывает предполагаемый url правильно. В строке после этого я пробовал практически все из $window.открыть окно.местоположение.href и неважно, что я пробовал перенаправление не происходит.
ИЗМЕНИТЬ (РАЗРЕШЕНО):
нашел проблему.
var landingUrl = $window.location.host + "/login";
$window.open(landingUrl, "_self");
переменная landingUrl была установлена в 'domain.com/login', который не будет работать с $окно.местоположение.хреф (что было одной из вещей, которые я пробовал). Однако после изменения кода
var landingUrl = "http://" + $window.location.host + "/login";
$window.location.href = landingUrl;
Это сейчас завод.
5 ответов
Я считаю, что способ сделать это -$location.url('/RouteTo/Login');
редактировать для ясности
скажем, мой маршрут для моего входа в систему был /Login
, Я бы сказал $location.url('/Login')
для перехода к этому маршруту.
для мест за пределами углового приложения (т. е. без определенного маршрута), простой старый JavaScript будет служить:
window.location = "http://www.my-domain.com/login"
Кажется, что для полной перезагрузки страницы $window.location.href
является предпочтительным способом.
это не вызывает полной перезагрузки страницы при изменении URL-адреса браузера. Чтобы перезагрузить страницу после изменения URL-адреса, используйте API нижнего уровня, $window.местоположение.хреф.
Это может помочь вам! демо
код 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>
не уверен, с какой версии, но я использую 1.3.14 и вы можете просто использовать:
window.location.href = '/employee/1';
нет необходимости вводить $location
или $window
в контроллере и нет необходимости получать текущий адрес хоста.
вы должны поставить:
HTML-код ng-app= "urlApp" ng-controller= "urlCtrl">
таким образом, угловая функция может получить доступ к объекту "window"