Использование $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"