使用$ window或$ location在AngularJS中重定向

时间:2014-07-17 02:54:16

标签: javascript angularjs redirect angular-ui-router

我正在处理的应用程序包含各种状态(使用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");
        }
    });
});

console.log正确显示了预期的网址。在那之后,我几乎尝试了从$ window.open到window.location.href的所有内容,无论我尝试过什么都没有重定向。

编辑(已解决):

发现了这个问题。

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;

它现在有效。

5 个答案:

答案 0 :(得分:74)

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

编辑清晰度

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

对于Angular应用程序之外的位置(即未定义路径),将提供普通的旧JavaScript:

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

答案 1 :(得分:34)

似乎对于整页重新加载$window.location.href是首选方式。

  

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

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

答案 2 :(得分:19)

它可能对你有所帮助! demo

AngularJs代码示例

<div ng-app="urlApp">
    <div ng-controller="urlCtrl">
        Redirect to <a href="#" ng-click="ClickMeToRedirect()">Click Me!</a>
    </div>
</div>

HTML代码示例

{{1}}

答案 3 :(得分:4)

不确定从哪个版本开始,但我使用1.3.14而你可以使用:

window.location.href = '/employee/1';

无需在控制器中注入$location$window,也无需获取当前主机地址。

答案 4 :(得分:-11)

你必须把:

&lt; html ng-app =&#34; urlApp&#34; NG-控制器=&#34; urlCtrl&#34;&GT;

这样角度函数就可以访问&#34; window&#34;对象