使用$ window或$ location在AngularJS中redirect

我正在处理的应用程序包含各种状态(使用ui路由器),其中一些州要求您login,其他人是公开的。

我创build了一个有效地检查用户是否login的方法,当前有什么问题实际上是在必要时redirect到login页面。 应该注意的是,login页面目前不在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正确显示了预期的URL。 在那之后,我尝试了几乎所有的事情,从$ window.open到window.location.href,不pipe我尝试过什么,都不会发生redirect。

编辑(已解决):

发现问题。

 var landingUrl = $window.location.host + "/login"; $window.open(landingUrl, "_self"); 

variableslandingUrl被设置为'domain.com/login',这不会与$ window.location.href(这是我尝试的事情之一)的工作。 但是在改变代码之后

 var landingUrl = "http://" + $window.location.host + "/login"; $window.location.href = landingUrl; 

现在工作。

我相信这样做是$location.url('/RouteTo/Login');

编辑清晰度

说我的login视图的路线是/Login ,我会说$location.url('/Login')导航到该路线。

对于Angular应用以外的位置(即没有定义路由),普通的旧JavaScript将服务器:

 window.location = "http://www.domain.com/login" 

看来,整个页面重新加载$window.location.href是首选的方式。

浏览器URL更改时,不会导致整个页面重新加载。 要在更改URL后重新加载页面,请使用较低级别的API $ window.location.href。

https://docs.angularjs.org/guide/$location

它可能会帮助你! 演示

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”>

这样angular函数可以访问“窗口”对象