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

Using $window or $location to Redirect in AngularJS

本文关键字:location 重定向 window AngularJS      更新时间:2023-09-26

我正在开发的应用程序包含各种状态(使用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正确显示预期的URL。在这行之后,我几乎尝试了从$window开始的所有内容。打开window.location.href,不管我怎么尝试都没有重定向发生

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

假设我的登录视图的路由是/Login,我将使用$location.url('/Login')来导航到该路由。

对于Angular应用之外的位置(即没有定义路由),普通的旧JavaScript将提供:

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

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

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

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,不需要获取当前主机地址

你必须写:

& lt; html ng-app ="urlApp ng-controller"="urlCtrl">

这样,angular函数就可以访问到window对象