Использование $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.местоположение.хреф.

https://docs.angularjs.org/guide / $местоположение


Это может помочь вам! демо

код 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"